Ich habe ein Modul, das eine Methode ruft, die Bluebird verspricht verwendet. Hier ist das Modul, vereinfacht. Cassandra ist einfach ein Wrapper um einige db Anrufe, die sie promisfies:Kann Sinon Spion im Zusammenhang mit einem Mokka-Test mit Methode aufgerufen werden, die Methode mit Versprechen ruft
var Cassandra = require('../lib/cassandraObject');
var cassandra = new Cassandra();
exports.doIt = function _doIt(req, res) {
cassandra.queryPromise("query", [1, 2, 3])
.then(function (results) {
res.sendStatus(200);
})
.catch(function(er) {
res.sendStatus(500);
})
}
Ich versuche, dies zu testen mit Sinon und Sinon-drossel. Ich Stummel den Anruf für Cassandras Abfrage Versprechen, und ich mache res.sendStatus einen Spion:
it("makes a call to doIt", function() {
var qpMock = sinon.stub(Cassandra.prototype, "queryPromise").resolves(['yay!']);
var req = {};
var res = {
sendStatus: sinon.spy(),
};
myModule.doIt(req, res);
expect(qpMock.args[0][1][0]).to.equal(1); //ok
expect(res.sendStatus).to.have.been.calledWith(200); //error ! not called yet!
}
ich mit diesen Bibliotheken gedacht, die dann() der Stubs sofort und nicht asynchron aufgerufen werden würde, aber dies nicht scheint der Fall zu sein. Der Aufruf von res.sendStatus() wird zwar aufgerufen, aber nachdem der Test den Gültigkeitsbereich überschritten hat.
Gibt es eine Möglichkeit zu wissen, wann die res.sendStatus() aufgerufen wird, und sie im Rahmen des Tests zu halten, damit ich auf den übergebenen Wert geltend machen kann?