Estou enviando uma solicitação de rede em um caso de teste, mas às vezes isso leva mais de 2 segundos (o tempo limite padrão).
Como aumentar o tempo limite de um único caso de teste?
Estou enviando uma solicitação de rede em um caso de teste, mas às vezes isso leva mais de 2 segundos (o tempo limite padrão).
Como aumentar o tempo limite de um único caso de teste?
Respostas:
Aqui está: http://mochajs.org/#test-level
it('accesses the network', function(done){
this.timeout(500);
[Put network code here, with done() in the callback]
})
Para a função de seta, use o seguinte:
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)
ao final deit(...).timeout(500)
Se você deseja usar as funções de seta es6, pode adicionar um .timeout(ms)
no final de sua it
definição:
it('should not timeout', (done) => {
doLongThing().then(() => {
done();
});
}).timeout(5000);
Pelo menos isso funciona no texto datilografado.
.timeout
não está incluído nas tipagens DefinitelyTyped para mocha: i.imgur.com/jQbWCn1.png - Usando this.timeout(2000)
ou this.slow(500)
com um regulares obras função antiga e compila sem erros
it
, não funciona describe
.
describe()
ou context()
?
.timeout
agora está incluído no tipagens Mocha do DefinitelyTyped em: Mocha.IRunnable
. No entanto, se você estiver usando o IDE Webstorm para executar esses testes, observe: por qualquer motivo, o plug-in de integração Mocha do WebStorm ainda não reconhece os testes Mocha com .timeout()
anexado (o que significa que nenhum botão 'executar' aparece ao lado deles), e, portanto, defendo evitar as funções de seta para permitir o uso this.timeout()
.
(desde que eu me deparei com isso hoje)
Cuidado ao usar a sintaxe de seta gorda do ES2015:
Isso irá falhar:
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();
});
EDIT: Por que falha:
Como @atoth menciona nos comentários, as funções de seta gorda não possuem essa vinculação. Portanto, não é possível que a função it se vincule a isso do retorno de chamada e forneça uma função de tempo limite .
Conclusão : não use as funções de seta para funções que precisam de um tempo limite aumentado.
this
vinculação nas funções das setas - não da mesma maneira sugere que elas tenham algum tipo, apenas diferente. Eles só têm escopos lexicais. Você não pode vincular isso inexistente. É por isso que .bind
, .call
etc. não funciona com isso.
this
é.
Se você estiver usando no NodeJS, poderá definir o tempo limite no package.json
"test": "mocha --timeout 10000"
então você pode executar usando o npm como:
npm test
Você também pode pensar em adotar uma abordagem diferente e substituir a chamada do recurso de rede por um stub ou objeto simulado. Usando o Sinon , você pode separar o aplicativo do serviço de rede, concentrando seus esforços de desenvolvimento.
Para navegação de teste em 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);
});
});
});
No exemplo, o tempo de teste é 4000 (4s).
Nota: setTimeout(done, 3500)
é menor pelo que done
é chamado dentro do tempo do teste, mas clearTimeout(timeOut)
evita que seja usado o tempo todo.
Isso funcionou para mim! Não foi possível encontrar nada para fazer funcionar antes ()
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
});