Po pierwsze, zdecydowanie użyłbym mocha.opts
, dzięki czemu nie musisz uwzględniać opcji, które chcesz za każdym razem. Jak wskazano, jedną z opcji jest użycie --grep
, ale nie jestem wielkim fanem tego osobiście. Wymagało to nazwania wszystkiego w zbyt uproszczony sposób. Jeśli haczyk before
NIE jest asynchroniczny, możesz użyć --require
w swoim mocha.opts
. na przykład
#mocha.opts
--recursive
--require test/helpers.js
Brzmi to tak nie działa dla Ciebie, ponieważ chcemy globalnego after
hak jak dobrze. To, co zrobiłem, to po prostu wywołanie zestawu testów za każdym razem, ale jeśli jestem w trakcie pracy i chcę tylko przetestować jeden pakiet, lub nawet jeden konkretny test, używam funkcji wyłączności, only
https://mochajs.org/#exclusive-tests. Możesz to zrobić it.only('...
lub describe.only('...
Jeśli to zrobisz, przegląda wszystkie testy i ustawia dokładnie tak, jak zrobiłaby to twoja pełna uprząż testowa, ale wtedy wykonuje tylko test lub pakiet, który określiłeś.
Teraz możesz włączyć te globalne haki bez problemu. @Louis wspomina, że twój helpers.js
ładuje się w odpowiedniej kolejności tylko przypadkowo. To nie jest prawda. Jeśli umieścisz jakieś haki poza blokiem describe
, automatycznie stanie się globalnym hakiem. Można to osiągnąć albo poprzez wprowadzenie go w jego własnym pliku
// helpers.js
before(function() { console.log('testing...'); });
lub w pliku testowego
// some.spec.js
before(function() { console.log('testing...'); });
describe('Something', function() {
it('will be tested', function() {
...
});
});
Oczywiście, myślę, że wprowadzenie go w jego własnym pliku jest czystsze. (Nazwałem to hooks.js
). Chodzi o to, że nie wynika to z kolejności ładowania plików.
Tylko jeden błąd, który może być oczywisty dla innych, ale ja zmagałem się z pokrótce - haki nie umieszczone w bloku describe
są CAŁKOWITA. Nie są one specyficzne dla katalogu. Więc jeśli skopiujesz helpers.js
do podkatalogu testów, hak before
i after
będzie teraz strzelał dwa razy. Ponadto, jeśli umieścisz tam hak beforeEach
, wystrzeli on przed każdym pojedynczym testem, a nie tylko tymi testami w tym katalogu.
W każdym razie, wiem, że ten post jest trochę stary, ale mam nadzieję, że pomoże to innym osobom, które mają podobne problemy.
z pytaniem edytowany, odpowiedź teraz czyni mniej sensu. – Zlatko