Entschuldigung, wenn das eine einfache Frage ist, bin ich relativ neu bei Node und Sinon. Ich habe Mühe, herauszufinden, wie man behauptet, dass eine verschachtelte asynchrone Funktion in Nodejs aufgerufen wurde.Sinon - wie verschachtelte Funktion stub?
Ich benutze Mokka, Chai, Sinon und Anfrage (https://github.com/request/request) aber denke, dass ich etwas Grundlegendes auf dem Stubbing Teil vermisse.
Beispiel innerhalb my_app.js -
var request = require('request');
function MyModule() {
};
MyModule.prototype.getTicker = function(callback) {
request('http://example.com/api/ticker', function(error, response) {
if (error) {
callback(error);
} else {
callback(null, response);
}
});
};
exports.mymodule = new MyModule();
Innerhalb des Tests. Ich versuche, den Aufruf zur Anforderung auszugeben und einige Dummy-Daten zur Verfügung zu stellen. Aber ich halte einen Fehler bekommen „Anforderung ist nicht definiert“ auf der Linie, wo ich "m den Stummel zu schaffen.
var myApp = require('../my_app.js')
,assert = require("assert")
,chai = require('chai')
,sinon = require('sinon')
,expect = chai.expect;
describe('mymodule object', function() {
var mymodule = myApp.mymodule;
before(function(done) {
sinon.stub(request).yields(null, JSON.stringify({
price: '100 USD'
}));
done();
});
it('getTicker function should call request on example ticker', function(done) {
mymodule.getTicker(function(error, result){
request.called.should.be.equal(true);
done();
});
});
});
Ich weiß, ich sinon.stub (objname, zuordnen kann‚funcname‘) oder sinon.stub ("funcname"), aber diese setzen nur das äußere Objekt, ich versuche die Funktionsanforderung zu stubben
Irgendwelche Ideen, wie man das macht? Vielleicht muss ich auch einen Spion verwenden (aber wie?) Oder gibt es einen besseren Ansatz zum Testen der obigen getTicker-Funktion?
Ok super, dachte nicht, die Get-Methode auf diese zu verwenden. Jetzt kann ich auch einen Spion verwenden, um zu überprüfen, ob der Rückruf aufgerufen wurde, denke ich. –
Ahh yup Ich kann überprüfen, dass der Rückruf aufgerufen wurde. aber ich benutze eine etwas andere Syntax 'mymodule.getTicker (callback);' request.get.should.have.been.called; 'und' request.get.should.have.been.called; 'Thanks a ton ! –