Ao tentar executar o teste da aplicação é retornada a seguinte mensagem:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
Ao tentar executar o teste da aplicação é retornada a seguinte mensagem:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
Oi Gilmar, o teste tá demorando pra retornar uma resposta. Você tem a chamada da função done() no seu código? Posta ele aqui pra gente dá uma olhada?
var http = require('http');
describe('ProdutosController', function () {
it('listagem json', function (funcaoFinalizacao) {
var configuracoes = {
hostname: 'localhost',
port: 3000,
path: '/produtos',
headers: {
'Accept': 'application/json'
}
};
http.get(configuracoes, function (res) {
if (res.statusCode == 200) {
console.log("Status ta ok");
}
if (res.headers['content-type'] == 'application/json;charset=utf-8') {
console.log("Content type ok");
}
funcaoFinalizacao();
});
});
})
Oi Gilmar, tudo bem? Aparentemente você não pode trocar o nome da função done
pra funçãoFinalizacao
por que done
é o nome esperado pela biblioteca de teste, experimenta trocar isso pra ver se funciona?
Olá Wanderson, eu realizei este teste mesmo assim o problema persistiu. Acabei encontrando o erro em outra parte do código.
Obrigado.
O problema foi resolvido Gilmar? Qual foi a solução?
Sim foi resolvido. O erro estava na query do mysql em outro arquivo.
Aproveitando o fórum aqui, quanto a função done que você mencionou.
Veja o exemplo abaixo:
var express = require('../config/express')
var request = require('supertest')(express);
describe('#ProdutosController', function () {
it('#listagem json', function (done) {
request.get('/produtos')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200);
done();
});
//Forma 2
it('#listagem json', function (done) {
request.get('/produtos')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200,done);
});
});
Aparentemente os dois códigos fazem a mesma coisa, no final da execução chamam a função done, porém no segundo exemplo ele ultrapassa o tempo limite, sendo assim a única forma que funciona é quando chamo a função done separadamente, existe algum motivo para isso ?
A diferença é quando a função done é chamada, perceba que, no primeiro caso, você executa a função done e no segundo caso, você repassa a função done para que outra função execute a mesma.
O que pode acontecer é que no primeiro caso, o teste tenha sido encerrado antes do expect realmente receber o resultado e como o done não recebeu nenhum erro, fez o teste passar.
No segundo caso, como o done vai ser executado pelo expect, o teste demora a passar, ultrapassando o tempo requerido ou também, recebendo um erro internamente fazendo o teste não passar.
Testar código assíncrono pode apresentar esses problemas, e ai, você deve pensar, tem algum outro comportamento acontecendo que faz algo errado acontecer?
Entendo, realmente isso esta acontecendo, ele não espera o resultado do expect e deixa passar como resolvido, vou analisar o resto do código então.
Valeeeu
Precisando, posta o código que a gente vê junto.
Acredito que o problema seja porque você esqueceu de chamar o express
Ao invés de:
var express = require('../config/express');
Deveria ser:
var express = require('../config/express')();
Isso fez com que a função done() não fosse invocada, causando o erro.