Andernfalls test zeigt die Fehlermeldung "Fehler: timeout 2000ms überschritten" bei der Verwendung von Sinon-Chai
Habe ich folgende route (express), für die ich Schreibe, ein integration test.
Hier der 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();
});
};
Ich will, um zu testen, ob alle Komponenten zusammen arbeiten, aber mit einem gefälschten HTTP-Antwort, ich bin so erstellen Sie einen stub für die Anfrage/http-Interaktionen.
Ich bin mit Chai, Sinon und Sinon-Chai und Mokka, wie der test-runner.
Hier ist der test-code:
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);
});
});
Wenn das argument geschrieben, die Antwort (response.schreiben) - entspricht der test geht ok. Das Problem ist, dass wenn der test fehlschlägt, wird der Fehler Meldung ist:
"Fehler: timeout 2000ms überschritten"
Habe ich verwiesen diese Antwort, jedoch ist es nicht das problem zu beheben.
Wie bekomme ich diesen code zum anzeigen der richtigen test-name und der Grund für den Ausfall?
NB Eine sekundäre Frage sein mag, könnte die Möglichkeit das response-Objekt wird geltend gemacht, die auf verbessert werden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem sieht aus wie eine Ausnahme wird immer irgendwo verschluckt. Das erste, was mir in den Sinn kommt ist Zugabe
done
am Ende Ihre Versprechen Kette:Es ist in der Regel der Fall, wenn die Arbeit mit Versprechungen, die Sie wollen, um am Ende der Kette durch den Aufruf einer Methode wie diese. Einige Implementierungen nennen es
done
, manche nennen esend
.Wenn der Mokka nie sieht die Ausnahme, es gibt nichts Sie tun können, um Ihnen eine schöne Fehlermeldung. Ein Weg, um zu diagnostizieren eine mögliche geschluckt Ausnahme ist das hinzufügen eines try... catch-block, um den fehlerhaften code und dump etwas auf der Konsole aus.