Sinon - wie stub verschachtelte Funktion?
Entschuldige mich, wenn dies ist eine einfache Frage, ich bin relativ neu zu Knoten und Sinon. Ich bin kämpfen, um herauszufinden, wie zu behaupten, dass eine verschachtelte asynchrone Funktion aufgerufen wurde, in Nodejs.
Bin ich mit mocha, chai, sinon, und Anfrage ( https://github.com/request/request ), aber glaube, ich bin fehlt etwas grundlegendes an der Lunte Teil.
Beispiel in 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 der test. Ich versuche, die stub den Aufruf von Anfrage und bieten einige dummy-Daten zurück. Aber ich bekomme immer eine Fehlermeldung "Anforderung wird nicht definiert" auf die Zeile, wo ich"m erstellen der stub.
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 kann vergeben sinon.stub(objname, "Funktionsname") oder sinon.stub("Funktionsname"), aber diese stellen nur die äußeren Objekt , ich versuche, die stub die Funktion request, die innerhalb der Funktion getTicker.
Irgendwelche Ideen auf, wie dies zu tun? Vielleicht muss ich verwenden, ein Spion, wie gut (aber wie?) Oder gibt es einen besseren Ansatz zum testen der oben getTicker Funktion?
InformationsquelleAutor Justin Maat | 2014-12-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erhalten Sie die unbestimmte Nachricht, da die
request
variable unbekannt ist, im Rahmen Ihrer Prüfung. Aber selbst wenn Sie waren, dies zu korrigieren, und weisen Sie dierequest
Bibliothek der Variablen, würden Sie immer noch eine Fehlermeldung erhalten, als sinon erfordert eine Methode, auf ein beliebiges Objekt zur Verfügung gestellt, um ein stub.Folge eine solche ist, dass die
request
Funktion selbst kann nicht durch Stubs ersetzt werden, da es nicht auf ein Objekt, sondern als eine Funktion auf, die anderen Methoden sind definiert. Um die Testbarkeit zu unterstützen, daher wäre es vorzuziehen, zu verzichten mitrequest
direkt im code, und verwenden Sie stattdessen Ihr beigefügten Methoden, die dann gekürzte. Zum Beispiel:my_app.js
my_test.js
(Beachten Sie, dass die Ausführung Mokka asynchron ist un-nötig, wenn ein stub ist synchron).
Ahh ja ich kann überprüfen Sie die callback aufgerufen wurde. aber ich bin mit einer etwas anderen syntax
mymodule.getTicker(callback);
request.get.should.have.been.called;
undrequest.get.should.have.been.called;
Dank einer Tonne!InformationsquelleAutor scarlz