Przesyłam żądanie sieciowe w przypadku testowym, ale czasami trwa to dłużej niż 2 sekundy (domyślny limit czasu).
Jak zwiększyć limit czasu dla pojedynczego przypadku testowego?
Przesyłam żądanie sieciowe w przypadku testowym, ale czasami trwa to dłużej niż 2 sekundy (domyślny limit czasu).
Jak zwiększyć limit czasu dla pojedynczego przypadku testowego?
Odpowiedzi:
Proszę bardzo: http://mochajs.org/#test-level
it('accesses the network', function(done){
this.timeout(500);
[Put network code here, with done() in the callback]
})
Do funkcji strzałek używaj:
it('accesses the network', (done) => {
[Put network code here, with done() in the callback]
}).timeout(500);
before(function(done){this.timeout(5 * 1000);...});
.timeout(500)
na koniecit(...).timeout(500)
Jeśli chcesz używać funkcji strzałek es6, możesz dodać a .timeout(ms)
na końcu swojej it
definicji:
it('should not timeout', (done) => {
doLongThing().then(() => {
done();
});
}).timeout(5000);
Przynajmniej działa to w maszynopisie.
.timeout
nie jest wliczone w typowania DefinitelyTyped dla mocha: i.imgur.com/jQbWCn1.png - Używanie this.timeout(2000)
lub this.slow(500)
z regularnym stare utwory funkcyjne i kompiluje bez błędów
it
, ale nie działa describe
.
describe()
lub context()
?
.timeout
jest obecnie zawarte w Mocha typowania DefinitelyTyped pod adresem: Mocha.IRunnable
. Jeśli jednak używasz Webstorm IDE do uruchamiania tych testów, uwaga: z jakiegokolwiek powodu wtyczka integracji Mocha WebStorm nadal nie rozpoznaje testów Mocha z .timeout()
dołączonymi (co oznacza, że obok nich nie pojawia się przycisk „uruchom”), i dlatego zalecam unikanie funkcji strzałek, aby umożliwić korzystanie z nich this.timeout()
.
(odkąd dzisiaj na to wpadłem)
Zachowaj ostrożność podczas korzystania ze składni Fat Arrow ES2015:
To się nie powiedzie:
it('accesses the network', done => {
this.timeout(500); // will not work
// *this* binding refers to parent function scope in fat arrow functions!
// i.e. the *this* object of the describe function
done();
});
EDYCJA: Dlaczego się nie udaje:
Jak wspomniano w komentarzach @atoth, funkcje strzałek grubych nie mają tego wiązania. W związku z tym, że nie jest możliwe, by to funkcjonować wiązać się to z zwrotnego i zapewnić Timeout funkcję.
Konkluzja : Nie używaj funkcji strzałek w przypadku funkcji, które wymagają dłuższego czasu oczekiwania.
this
Funkcje strzałek nie są wiążące - nie ten sam sposób sugerowałby, że mają jakieś, po prostu inne. Mają tylko zakresy leksykalne. Nie możesz powiązać nieistniejącego tego. Dlatego .bind
, .call
itp nie praca z nim.
this
jest.
Jeśli używasz w NodeJS, możesz ustawić limit czasu w package.json
"test": "mocha --timeout 10000"
wtedy możesz uruchomić używając npm:
npm test
Możesz także pomyśleć o przyjęciu innego podejścia i zastąpieniu wywołania zasobu sieciowego obiektem pośredniczącym lub próbnym. Korzystając z Sinon , możesz oddzielić aplikację od usługi sieciowej, koncentrując swoje wysiłki na rozwoju.
Do nawigacji testowej w Express
:
const request = require('supertest');
const server = require('../bin/www');
describe('navegation', () => {
it('login page', function(done) {
this.timeout(4000);
const timeOut = setTimeout(done, 3500);
request(server)
.get('/login')
.expect(200)
.then(res => {
res.text.should.include('Login');
clearTimeout(timeOut);
done();
})
.catch(err => {
console.log(this.test.fullTitle(), err);
clearTimeout(timeOut);
done(err);
});
});
});
W tym przykładzie czas testu wynosi 4000 (4s).
Uwaga: setTimeout(done, 3500)
jest niewielka, ponieważ done
jest wywoływana w czasie testu, ale clearTimeout(timeOut)
unika się jej przez cały ten czas.
To zadziałało dla mnie! Nie mogłem znaleźć niczego, co by działało wcześniej ()
describe("When in a long running test", () => {
it("Should not time out with 2000ms", async () => {
let service = new SomeService();
let result = await service.callToLongRunningProcess();
expect(result).to.be.true;
}).timeout(10000); // Custom Timeout
});