Wpadłem ostatnio na problem, którego nie potrafię wyjaśnić. Mam dużo kodu w tych testach, więc mam zamiar zrobić mój najlepszy uchwycić ideę tutajMocha beforeEach vs before execution
mam testy, które wyglądać tak:
describe('main page', function(){
beforeEach(function(done){
addUserToMongoDb(done); // #1
});
afterEach(function(done){
removeUserFromMongoDb(done);
});
context('login', function(){
it('should log the user in, function(){
logUserIn(user_email); // #2 - This line requires the user from the beforeEach
});
});
context('preferences', function(){
before(function(done){ //#3
logUserInBeforeTest(user_email);
});
it('should show the preferences', function(){
doCheckPreferences(); // #4
});
});
});
Problem znaczy beforeEach przez #1
działa poprawnie . Widzę, jak to się dzieje na DB i testy w passie #2
.
Jednak testy w kontekście preferencji pod adresem #4
nie powiodły się, ponieważ nie można znaleźć użytkownika, który mógłby go zalogować pod numerem #3
.
Wygląda na to, że kontekst before
jest wykonywany przed opisem beforeEach
, co powoduje ich niepowodzenie. Jeśli przeniesię logUserIn
do bloku it
, to działa dobrze.
Co może spowodować?
Nie można wytłumaczyć, dlaczego * "Wygląda na to, że poprzedni kontekst jest wykonywany przed opisem beforeEach" *, ale czy w tym momencie nie powinieneś wykonywać 'done'? –
Przed jest przed całym blokiem, przed każdym przed każdym testem. –
@StevenScott Więc to dlaczego. Opis beforeEach działa wcześniej po kontekście. Szkoda, że dokumentacja nie stała się bardziej oczywista. – Tomo