2015-12-24 13 views
5

Używam mocha do uruchamiania testów napisanych przy użyciu węzła. Zakładałem, że każdy z moich testów będzie odizolowany od siebie. Tak się nie wydaje. Kiedy uruchamiasz mocha w katalogu testów, wydaje się, że ładujesz wszystkie pliki testowe razem, a następnie wykonujesz każdy z pakietów testowych.Jak mogę zmusić mokka do prowadzenia testów w odosobnieniu?

Może to zepsuć izolację, gdy w jednym teście znajdują się moduły, na które mogą mieć wpływ moduły użyte w innym teście.

Mam w tym Gist (Failing Mocha Test) dwa moduły (aib) i dwa testy (test i test b). Jeśli prowadzisz Mocha niezależnie na każdym teście oba uda:

$ mocha --ui tdd a-test 
$ mocha --ui tdd b-test 

Jednak jeśli uruchomię tych badań łącznie, a-test nie powiedzie się:

$ mocha --ui tdd . 

czy naprawdę jest to niezbędne do uruchomienia mocha dla każdego indywidualny test, aby uzyskać odpowiednią izolację?

Uwaga: Powodem niepowodzenia testu A jest wywołanie zdarzenia, które wywołuje singleton w module b. Nie występuje to w normalnym wykonaniu testu b. Ponieważ test a dostarcza kompletny zestaw zależności (które nie obejmuje b), byłem zaskoczony, że wszystkie moduły zostały załadowane do jednego środowiska testowego.

Odpowiedz

2

Jeśli wszystkie specyfikacje zostaną uruchomione razem w jednym poleceniu, spowoduje to załadowanie wszystkich modułów do jednego środowiska testowego.

Utwory singleton są generalnie trudne do przetestowania, jeśli nie masz kodu resetowania instancji singleton lub tworzenia nowej, gdy jest ona potrzebna.

Prawdopodobnie powinieneś zmienić kod. Dodaj funkcję resetowania w a.js zresetować targets = [];

Następnie dodać do b-test.js

suiteSetup("B", function(){ 
    a.reset(); 
}); 

lub coś w tym pomoże.

Powiązane problemy