W mojej aplikacji węzłowej używam mokki do testowania mojego kodu. Podczas wywoływania wielu funkcji asynchronicznych za pomocą mocha, pojawia się błąd przekroczenia limitu czasu ( Error: timeout of 2000ms exceeded.
). Jak mogę to rozwiązać?
var module = require('../lib/myModule');
var should = require('chai').should();
describe('Testing Module', function() {
it('Save Data', function(done) {
this.timeout(15000);
var data = {
a: 'aa',
b: 'bb'
};
module.save(data, function(err, res) {
should.not.exist(err);
done();
});
});
it('Get Data By Id', function(done) {
var id = "28ca9";
module.get(id, function(err, res) {
console.log(res);
should.not.exist(err);
done();
});
});
});
Odpowiedzi:
Możesz ustawić limit czasu podczas uruchamiania testu:
Lub możesz ustawić limit czasu dla każdego pakietu lub każdego testu programowo:
Aby uzyskać więcej informacji, zobacz dokumenty .
źródło
-t
. jeśli użyjesz testu mokki do uruchomienia mokki z zadania chrząknięcia, jest to również obsługiwane w obiekcie opcjioptions:{timeout:15000}
.TypeError: this.timeout is not a function
przy użyciu"mocha": "^3.5.0"
Uważam, że „rozwiązanie” polegające na zwiększeniu limitów czasowych zaciemnia to, co naprawdę się tutaj dzieje, co też jest
Zazwyczaj napotykasz numer 2, gdy Mocha nie otrzymuje błędów potwierdzenia od oddzwonienia. Jest to spowodowane tym, że jakiś inny kod połyka wyjątek na górze stosu. Prawidłowym sposobem radzenia sobie z tym jest naprawienie kodu, a nie połknięcie błędu .
Gdy kod zewnętrzny połyka błędy
Jeśli jest to funkcja biblioteki, której nie możesz zmodyfikować, musisz złapać błąd asercji i sam przekazać go Mocha. Robisz to, zawijając swoje wywołanie zwrotne asercji w bloku try / catch i przekazując wszelkie wyjątki do gotowej procedury obsługi.
Tę płytę kotłową można oczywiście wyodrębnić do jakiejś funkcji użytkowej, aby uczynić test nieco bardziej przyjemnym dla oka:
Przyspieszenie testów sieciowych
Poza tym sugeruję, abyś zapoznał się z poradami na temat rozpoczynania używania kodów testowych do połączeń sieciowych w celu przeprowadzenia testów bez konieczności polegania na działającej sieci. W przypadku Mocha, Chai i Sinon testy mogą wyglądać mniej więcej tak
Zobacz dokumentację Sinona,
nise
aby uzyskać więcej informacji.źródło
done()
pod koniec obietnicy i już wyśmiewam połączenia sieciowe za pomocą Angulara$httpBackend
, ale nie mam szczęścia. Zawinięcie każdej specyfikacji w try-catch nie wydaje się bardzo pragmatyczne. Jakieś inne sugestie? dzięki!try.... catch...
działa wokół błędu w testowanym kodzie, zamiast go naprawić .Trochę późno, ale ktoś może to wykorzystać w przyszłości ... Możesz zwiększyć limit czasu testu, aktualizując skrypty w pliku package.json, wykonując następujące czynności:
"scripts": { "test": "test --timeout 10000" //Adjust to a value you need }
Uruchom testy za pomocą polecenia
test
źródło
Jeśli używasz funkcji strzałek:
źródło
Dla mnie problemem była właściwie funkcja opisu, która po udostępnieniu funkcji strzałki powoduje, że mokka nie może przekroczyć limitu czasu i nie zachowuje się konsekwentnie. (Korzystanie z ES6)
ponieważ żadna obietnica nie została odrzucona, cały czas otrzymywałem ten błąd dla różnych testów, które zawiodły w bloku opisu
tak to wygląda, gdy nie działa poprawnie:
i to działa przy użyciu funkcji anonimowej
Mam nadzieję, że to komuś pomoże, moja konfiguracja dla powyższego: (nodejs: 8.4.0, npm: 5.3.0, mocha: 3.3.0)
źródło
Moim problemem nie było odesłanie odpowiedzi, więc zawiesiło się. Jeśli używasz ekspresowego, upewnij się, że res.send (dane), res.json (dane) lub jakakolwiek metoda interfejsu API, której chcesz użyć, jest wykonywana dla testowanej trasy.
źródło
Upewnij się, że rozwiązałeś / odrzuciłeś obietnice zastosowane w przypadkach testowych, czy to szpiedzy, czy pośrednicy, upewnij się, że rozwiązują / odrzucają.
źródło