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

Schreibe einen Kommentar