À 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