Sinon: ¿cómo resguardar la función anidada?

Disculpas si esta es una pregunta simple, soy relativamente nuevo en Node y Sinon. Estoy luchando tratando de descubrir cómo afirmar que se llamó a una función asincrónica anidada en Nodejs.

Estoy usando mocha, chai, sinon y request (https://github.com/request/request) pero creo que me falta algo básico en la parte de troquelado.

Ejemplo dentro de 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();

Dentro de la prueba. Estoy tratando de cerrar la llamada para solicitar y proporcionar algunos datos ficticios para devolver. Pero sigo recibiendo un error "la solicitud no está definida" en la línea donde estoy creando el código auxiliar.

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();
        });
    });

});

Sé que puedo asignar sinon.stub (objname, "funcname") o sinon.stub ("funcname"), pero esos solo establecen el objeto externo, estoy tratando de bloquear la solicitud de función que está dentro de la función getTicker.

¿Alguna idea sobre cómo hacer esto? Tal vez necesito usar un espía también (pero ¿cómo?) ¿O hay un mejor enfoque para probar la función getTicker anterior?

Respuestas a la pregunta(1)

Su respuesta a la pregunta