Eu realmente preciso retornar uma promessa em teste ao usar o Chai como Prometido?
Chai como prometidodocumentação afirma da seguinte maneira:
Aviso prévio: devolver ou notificar (concluído) deve ser usado com asserções de promessa.
E os exemplos no site são os seguintes:
return doSomethingAsync().should.eventually.equal("foo");
doSomethingAsync().should.eventually.equal("foo").notify(done);
A coisa é; Na verdade, eu escrevi um teste usando chai como prometido sem retornar a promessa. Igual a:
it('should resolve user', function () {
$state.get(state).resolve.user(dataservice, {
userId: testUser.id
}).should.eventually.eq(testUser);
$rootScope.$apply();
});
E funciona perfeitamente bem. Tenho certeza de que faz isso ao alterar testUser para outra coisa em que o teste falha. Assim como eu esperava. Portanto, não tenho certeza se estou fazendo algo errado aqui.
De fato, quando modifiquei o código para retornar uma promessa, ele falhou com o erro "Erro: o tempo limite de 2000ms foi excedido. Verifique se o retorno de chamada done () está sendo chamado neste teste". O código modificado está abaixo:
it('should resolve user', function () {
var promise = $state.get(state).resolve.user(dataservice, {
userId: testUser.id
}).should.eventually.eq(testUser);
$rootScope.$apply();
return promise;
});
Um pouco confuso aqui. Pode ter algo a ver com Angular $ q. Para deixar claro, a função resolve.user retorna uma promessa de $ q.