Jak mogę sprawić, aby ten test zakończył się pomyślnie bez uciekania się do uruchomień / oczekujących bloków?
it("cannot change timeout", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
expect(body).toEqual("hello world");
done();
});
});
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
wartości załatwiła mi sprawę na zupełnie nowej konfiguracji zbudowanej od podstaw przy użyciu Jasmine + Jest. Działa zgodnie z oczekiwaniami.it
.done
Wygląda na to , że do czasu rozpoczęcia testu podłączyłeś się już do tego, coDEFAULT_TIMEOUT_INTERVAL
było przedit
rozpoczęciem.Wysłano żądanie ściągnięcia dla tej funkcji ( https://github.com/mhevery/jasmine-node/pull/142 )
it("cannot change timeout", function(done) { request("http://localhost:3000/hello", function(error, response, body){ expect(body).toEqual("hello world"); done(); }); }, 5000); // set timeout to 5 seconds
źródło
Aby ustawić globalny limit czasu Jasmine-Node, wykonaj następujące czynności:
jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds
Podziękowania dla programisty Gabe'a Hicksa za znalezienie części .getEnv () poprzez debugowanie pomimo błędnych informacji w dokumencie README, który twierdzi, że zostało to zrobione przez ustawienie jasmine.DEFAULT_TIMEOUT_INTERVAL.
Jeśli chcesz ustawić niestandardowy limit czasu tylko dla jednej it (), możesz spróbować przekazać limit czasu (milisekundy) jako trzeci argument (po instrukcji string i funkcji). Oto przykład takiego rozwiązania , ale nie jestem pewien, co by się stało, gdyby niestandardowy limit czasu był dłuższy niż domyślny Jasmine. Spodziewam się, że to się nie uda.
źródło
jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;
globalny plik konfiguracyjny, którego używam do wszystkich testów i działa zgodnie z oczekiwaniami.Wygląda na to, że możesz teraz dodać go jako ostatni argument
it
funkcji:describe('my test', function(){ it('works', function(done){ somethingAsync().then(done); }, 10000); // changes to 10 seconds });
źródło
W Angular umieść to poza blokiem opisu:
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
Dotyczy to wszystkich testów w pliku .spec.ts
źródło
Umieść to po
describe
stwierdzeniu:describe("A saves to DB", function() { jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
źródło
Dodawanie:
jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime;
na pliku pomocniczym zadziałało dla mnie.źródło
Dlaczego nie szpiegując
setTimeout()
?Coś jak:
var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) { expect(timeout).toEqual(2500); func(); }); setTimeOut(function () { ... }, 2500); expect(spy).toHaveBeenCalled();
źródło
W moim przypadku miałem wiele przypadków testowych i podczas korzystania z wyżej wymienionego rozwiązania korzystałem z:
beforeEach(function() { originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; });
DEFAULT_TIMEOUT_INTERVAL nie został zaktualizowany w pierwszym przypadku testowym, więc musiałem dodać to:
beforeAll(() => { jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; })
do mojego kodu, aby pomyślnie przeprowadzić wszystkie testy.
źródło
Zmień j $ .DEFAULT_TIMEOUT_INTERVAL na 10000 w następującym pliku: npm \ node_modules \ jasmine-core \ lib \ jasmine-core
źródło