À défaut de test affiche “Erreur: délai d'attente de 2000ms dépassé” lors de l'utilisation de Sinon-Chai
J'ai le parcours suivant (express) pour lequel je suis en train d'écrire un test d'intégration.
Voici le code:
var q = require("q"),
request = require("request");
/*
Example of service wrapper that makes HTTP request.
*/
function getProducts() {
var deferred = q.defer();
request.get({uri : "http://localhost/some-service" }, function (e, r, body) {
deferred.resolve(JSON.parse(body));
});
return deferred.promise;
}
/*
The route
*/
exports.getProducts = function (request, response) {
getProducts()
.then(function (data) {
response.write(JSON.stringify(data));
response.end();
});
};
Je veux vérifier que tous les composants fonctionnent ensemble, mais avec une fausse réponse HTTP, donc je suis entrain de créer un stub de la demande/http interactions.
Je suis à l'aide de Chai, Sinon et Sinon-Chai et de Moka le test runner.
Voici le code de test:
var chai = require("chai"),
should = chai.should(),
sinon = require("sinon"),
sinonChai = require("sinon-chai"),
route = require("../routes"),
request = require("request");
chai.use(sinonChai);
describe("product service", function () {
before(function(done){
sinon
.stub(request, "get")
//change the text of product name to cause test failure.
.yields(null, null, JSON.stringify({ products: [{ name : "product name" }] }));
done();
});
after(function(done){
request.get.restore();
done();
});
it("should call product route and return expected resonse", function (done) {
var writeSpy = {},
response = {
write : function () {
writeSpy.should.have.been.calledWith("{\"products\":[{\"name\":\"product name\"}]}");
done();
}
};
writeSpy = sinon.spy(response, "write");
route.getProducts(null, response);
});
});
Si l'argument écrit à la réponse (la réponse.écrire) correspond au test passe ok. Le problème est que lorsque le test échoue, le message d'erreur est:
"Erreur: délai d'attente de 2000ms dépassé"
J'ai référencé cette réponse, cependant il ne permet pas de résoudre le problème.
Comment puis-je obtenir ce code pour afficher le bon critère nom et la raison de l'échec?
On est UNE question secondaire, pourrait la façon dont l'objet de la réponse est affirmé être améliorée?
OriginalL'auteur Bradley Braithwaite | 2014-01-24
Vous devez vous connecter pour publier un commentaire.
Le problème ressemble à une exception est arriver avalé quelque part. La première chose qui me vient à l'esprit est l'ajout de
à la fin de votre promesse de la chaîne:
C'est typiquement le cas lorsque l'on travaille avec des promesses que vous souhaitez mettre fin à votre chaîne en appelant une méthode de ce genre. Certaines implémentations de l'appeler
done
, certains l'appellentend
.Si Moka jamais voit l'exception, il n'y a rien qu'il peut faire pour vous donner un joli message d'erreur. Une façon de diagnostiquer une éventuelle ingestion d'exception est d'ajouter un bloc try... catch à travers le code fautif et vidage de quelque chose de la console.
Toutes les idées pour les cas d'erreur lors de l'exécution 500+ specs?
> une exception est arriver avalé quelque part
OriginalL'auteur Louis