Meteor test driven development [zamknięty]

zamknięte . To pytanie musi być bardziej skoncentrowane . Obecnie nie przyjmuje odpowiedzi.

chcesz poprawić to pytanie? Update the question so it edytując ten post.

Zamknięte 3 lata temu .

Popraw to pytanie Nie wiem jak zrobić test driven development w Meteorze.

Nie widzę tego nigdzie w dokumentacji czy FAQ. Nie widze zadnych przykladow ani czegos podobnego to.

Widzę, że niektóre pakiety używają Tinytest.

Potrzebowałbym odpowiedzi od programistów, co to jest roadmap w tym zakresie. Coś w stylu:

  • możliwe, bez dokumentacji, wymyśl to sam
  • meteor nie jest zbudowany w taki sposób, aby można było tworzyć testowalne aplikacje
  • jest to funkcja planowana
  • etc
 120
Author: Rubycut, 2012-10-20

13 answers

Aktualizacja 3 : począwszy od wersji Meteor 1.3, meteor zawiera przewodnik testowania z instrukcjami krok po kroku dotyczącymi testowania jednostek, integracji, akceptacji i obciążenia.

Aktualizacja 2: od 9 listopada 2015, prędkość nie jest już utrzymywana . Xolv.io skupia swoje wysiłki na szympansie , a Meteor Development Group musi wybrać oficjalne ramy testowe .

Aktualizacja: Prędkość to oficjalne testy Meteora roztwór od 0.8.1.


Niewiele napisano o automatycznych testach z Meteorem w tym czasie. Spodziewam się, że społeczność meteorów opracuje najlepsze praktyki testowania przed wprowadzeniem czegokolwiek w oficjalnej dokumentacji. W końcu Meteor osiągnął 0,5 W tym tygodniu, a rzeczy wciąż szybko się zmieniają.

Dobra wiadomość: możesz użyć węzła.js testing tools with Meteor .

Do mojego projektu Meteor, przeprowadzam testy jednostkowe z Mocha użycie Chai dla twierdzeń. Jeśli nie potrzebujesz pełnego zestawu funkcji Chai, polecam użycie should.js zamiast. W tej chwili mam tylko testy jednostkowe, choć z Mocha też można pisać testy integracyjne.

Upewnij się, że umieścisz swoje testy w folderze "testy" , aby Meteor nie próbował wykonać Twoich testów.

Mocha obsługuje CoffeeScript, mój wybór języka skryptowego dla projektów Meteor. Oto przykładowy plik Cakefile z zadania do prowadzenia testów Mocha. Jeśli używasz js z Meteorem, możesz dostosować polecenia do pliku Makefile.

Twoje modele meteorów będą musiały trochę zmodyfikować, aby wystawić się na działanie Mochy, a to wymaga pewnej wiedzy o tym, jak Node.js działa. Pomyśl o każdym węźle.plik js jako wykonywany we własnym zakresie. Meteor automatycznie eksponuje między sobą obiekty w różnych plikach, ale zwykłe aplikacje węzłowe-takie jak Mocha-tego nie robią. Aby nasze modele były testowane by Mocha, Eksportuj każdy model Meteora o następującym wzorze CoffeeScript:

# Export our class to Node.js when running
# other modules, e.g. our Mocha tests
#
# Place this at the bottom of our Model.coffee
# file after our Model class has been defined.
exports.Model = Model unless Meteor?

...a na górze testu Mocha, zaimportuj model, który chcesz przetestować:

# Need to use Coffeescript's destructuring to reference
# the object bound in the returned scope
# http://coffeescript.org/#destructuring
{Model} = require '../path/to/model'

Dzięki temu możesz zacząć pisać i uruchamiać testy jednostkowe ze swoim projektem Meteor!

 83
Author: Blackcoat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:29

Cześć wszystkim laika - zupełnie nowy framework testowy dla meteor http://arunoda.github.io/laika/

Możesz przetestować zarówno serwer jak i klienta jednocześnie.

Zastrzeżenie: jestem autorem Łajki.

 44
Author: Arunoda Susiripala,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-10 21:54:31

Zdaję sobie sprawę, że na to pytanie już udzielono odpowiedzi, ale myślę, że przydałoby się więcej kontekstu, w postaci dodatkowej odpowiedzi dostarczającej tego kontekstu.

Pracowałem nad rozwojem aplikacji z meteor, a także nad tworzeniem pakietów, zarówno poprzez implementację pakietu dla meteor core, jak i dla atmosphere .

Wygląda na to, że twoje pytanie może być właściwie pytaniem w trzech częściach:

  1. Jak przeprowadzić cały test meteorów Apartament?
  2. Jak pisać i uruchamiać testy dla poszczególnych inteligentnych pakietów ?
  3. Jak pisać i uruchamiać testy dla własnej aplikacji?

I wygląda na to, że gdzieś tam może być pytanie bonusowe: 4. Jak można wdrożyć ciągłą integrację dla 1, 2 i 3?

Rozmawiałem i zacząłem współpracować z Naomi Seyfer (@sixolet) w zespole meteor core team aby pomóc uzyskać ostateczne odpowiedzi na te wszystkie pytania pytania do dokumentacji.

Złożyłem wstępne żądanie ściągnięcia adresów 1 i 2 do meteor core: https://github.com/meteor/meteor/pull/573 .

Ja również niedawno odpowiedziałem na to pytanie: Jak przeprowadzić testy meteorów?

Myślę, że @Blackcoat definitywnie odpowiedział 3, powyżej.

Jeśli chodzi o bonus, 4, proponuję użyć circleci.com przynajmniej do ciągłej integracji dla własnych aplikacji. Obecnie wspieraj przypadek użycia opisany przez @ Blackcoat. Mam projekt, w którym z powodzeniem dostałem testy napisane w coffeescript, aby uruchomić testy jednostkowe z mocha, tak jak opisywał to @Blackcoat.

Dla ciągłej integracji na rdzeniu meteor i inteligentnych pakietach, Naomi Seyfer i ja rozmawiamy z założycielką circleci, aby zobaczyć, czy uda nam się wdrożyć coś niesamowitego w najbliższej przyszłości.

 14
Author: zealoushacker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:38

RTD został wycofany i zastąpiony przez Velocity, który jest oficjalnym frameworkiem testowym Meteor 1.0. Dokumentacja jest wciąż stosunkowo nowa, ponieważ prędkość jest w ciężkim rozwoju. Więcej informacji można znaleźć na Velocity Github repo , Velocity Homepage oraz The Meteor Testing Manual (paid content)

Disclaimer: jestem jednym z głównych członków zespołu Velocity i autorem książki.


Zobacz RTD, pełny framework testowy dla Meteor tutaj rtd.xolv.io . Obsługuje Jasmine / Mocha / custom i współpracuje zarówno ze zwykłym JS, jak i kawą. Obejmuje również pokrycie testowe, które łączy pokrycie jednostki / serwera/klienta.

I przykładowy projekt tutaj

Blog wyjaśniający testy jednostkowe z Meteorem tutaj

Podejście do testów akceptacyjnych e2e przy użyciu Selenium WebdriverJS i Meteor tutaj

Mam nadzieję, że to pomoże. Zastrzeżenie: jestem autorem RTD.

 12
Author: Xolv.io,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-11 21:15:33

Często korzystałem z tej strony i próbowałem wszystkich odpowiedzi, ale od początkującego punktu wyjścia uznałem je za dość mylące. Kiedy miałem jakieś problemy, byłem załamany, jak je naprawić.

To rozwiązanie jest naprawdę proste, jeśli nie jest jeszcze w pełni udokumentowane, więc polecam je dla osób takich jak ja, którzy chcą zrobić TDD, ale nie są pewni, jak działa testowanie w JavaScript i które biblioteki podłączają się do czego:

Https://github.com/mad-eye/meteor-mocha-web

FYI, odkryłem, że muszę również użyć Router Atmosphere pakiet zrobić trasę '/ testy', aby uruchomić i wyświetlić wyniki z testów, ponieważ nie chciałem, aby to zaśmiecać moją aplikację za każdym razem, gdy ładuje.

 6
Author: pipedreambomb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-17 14:37:43

O używaniu tinytest, możesz rzucić okiem na te przydatne zasoby:

  1. Podstawy są wyjaśnione w tym screencast: https://www.eventedmind.com/feed/meteor-testing-packages-with-tinytest

  2. Po zrozumieniu tego pomysłu, będziesz potrzebował publicznej dokumentacji API dla tinytest. Na razie jedyna dokumentacja do tego jest na końcu źródła tinytest pakietu: https://github.com/meteor/meteor/tree/devel/packages/tinytest

  3. Ponadto, screencast mówi o test-helpers, możesz rzucić okiem na wszystkich dostępnych pomocników tutaj: https://github.com/meteor/meteor/tree/devel/packages/test-helpers Często w każdym pliku znajduje się dokumentacja

  4. Kopanie w istniejących testach pakietów Meteora dostarczy wielu przykładów. Jednym ze sposobów jest wyszukanie Tinytest. lub test. w katalog pakietów z kodem źródłowym meteor

 6
Author: William Ledoux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-07 17:39:16

[1]}testy stają się główną częścią Meteor w nadchodzącym wydaniu 1.3. Początkowe rozwiązanie oparte jest na Mocha i Chai.

Oryginalne dyskusje na temat minimum realnego projektu można znaleźć tutaj, a szczegóły dotyczące pierwszej implementacji można znaleźć tutaj.

MDG stworzyło wstępne kości dokumentacji przewodnika do testów , które można znaleźć tutaj, a są kilka przykładowych testów tutaj .

To jest przykład test publikacji z linku powyżej:

  it('sends all todos for a public list when logged in', (done) => {
    const collector = new PublicationCollector({userId});
    collector.collect('Todos.inList', publicList._id, (collections) => {
      chai.assert.equal(collections.Todos.length, 3);
      done();
    });
  });
 5
Author: tomRedox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-02 15:00:14

Robię testy funkcjonalne/integracyjne z Meteor + Mocha w przeglądarce. Mam coś podobnego do poniższych (w coffeescript dla lepszej czytelności):

Na klienta...
Meteor.startup ->
    Meteor.call 'shouldTest', (err, shouldTest) ->
        if err? then throw err
        if shouldTest then runTests()

# Dynamically load and run mocha. I factored this out in a separate method so
# that I can (re-)run the tests from the console whenever I like.
# NB: This assumes that you have your mocha/chai scripts in .../public/mocha.
# You can point to a CDN, too.
runTests = ->
    $('head').append('<link href="/mocha/mocha.css" rel="stylesheet" />')
    $.getScript '/mocha/mocha.js', ->
      $.getScript '/mocha/chai.js', ->
        $('body').append('<div id="mocha"> </div>')
        chai.should() # ... or assert or explain ...
        mocha.setup 'bdd'
        loadSpecs() # This function contains your actual describe(), etc. calls.
        mocha.run()

...i na serwerze:

Meteor.methods 'shouldTest': -> true unless Meteor.settings.noTests  # ... or whatever.
Oczywiście możesz wykonać test po stronie klienta unit w ten sam sposób. Do testów integracyjnych miło jest mieć w pobliżu całą infrastrukturę Meteor.
 4
Author: jerico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-27 10:04:00

Jak powiedział Blackcout, Velocity jest oficjalnym frameworkiem TDD dla Meteora. Ale w tej chwili strona velocity Nie oferuje dobrej dokumentacji. Więc polecam obejrzeć:

 3
Author: Adrian Lopez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-13 21:26:14

Inną opcją, łatwo dostępną od wersji 0.6.0, jest uruchomienie całej aplikacji z lokalnych pakietów inteligentnych, z minimalną ilością kodu poza pakietami do uruchomienia aplikacji (ewentualnie wywołanie konkretnego pakietu inteligentnego, który jest podstawą aplikacji).

Możesz następnie wykorzystać Tinytest Meteor, który jest świetny do testowania aplikacji Meteor.

 2
Author: matb33,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-25 00:51:38

Z powodzeniem używam xolvio: cucumber i velocity do testów. Działa naprawdę dobrze i działa w sposób ciągły, dzięki czemu zawsze możesz zobaczyć, że twoje testy przechodzą.

 0
Author: Philip Beadle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-14 05:56:46

Meteor + TheIntern

Jakoś udało mi się przetestować aplikację Meteor z TheIntern.js.

Chociaż jest to zgodne z moją potrzebą. ale nadal myślę, że może to doprowadzić kogoś do właściwego kierunku i dzielę się tym, co zrobiłem, aby rozwiązać ten problem.

Istnieje funkcja execute, która umożliwia nam uruchamianie kodu JS, do którego możemy uzyskać dostęp do obiektów window, a co za tym idzie Meteor.

Chcesz wiedzieć więcej o wykonaj

Oto jak moje test suite poszukuje testów funkcjonalnych

define(function (require) {
    var registerSuite = require('intern!object');
    var assert = require('intern/chai!assert');
    registerSuite({
        name: 'index',

        'greeting form': function () {
            var rem = this.remote;
            return this.remote
                .get(require.toUrl('localhost:3000'))
                .setFindTimeout(5000)
                .execute(function() {
                        console.log("browser window object", window)
                        return Products.find({}).fetch().length
                    })
                .then(function (text) {
                    console.log(text)
                    assert.strictEqual(text, 2,
                        'Yes I can access Meteor and its Collections');
                });
        }
    });
});

Aby dowiedzieć się więcej, to jest mój gist

Uwaga: jestem jeszcze w bardzo wczesnej fazie z tym rozwiązaniem. Nie wiem, czy mogę zrobić skomplikowane testy z tym, czy nie. Ale jestem tego pewien.

 0
Author: Harpreet Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-23 09:58:16

Prędkość nie jest jeszcze dojrzała. Mam problemy z setTimeout, aby użyć velocity. Do testowania jednostek po stronie serwera możesz użyć tego pakietu .

Jest szybszy od prędkości. Prędkość wymaga ogromnego czasu, gdy testuję dowolną specyfikację z loginem. Za pomocą kodu Jasmine możemy przetestować dowolną metodę i publikację po stronie serwera.

 0
Author: Zahed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-10 21:21:05