Sinon - como stub função aninhada?

Desculpas se esta for uma pergunta simples, sou relativamente novo em Node e Sinon. Estou com dificuldades para descobrir como afirmar que uma função assíncrona aninhada foi chamada no Nodejs.

Estou usando mocha, chai, sinon e request (https://github.com/request/request), mas acho que estou perdendo algo básico na parte do stubbing.

Exemplo 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 do teste. Estou tentando desconectar a chamada para solicitar e fornecer alguns dados fictícios para retornar. Mas continuo recebendo um erro "solicitação não definida" na linha em que estou criando o esboço.

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

});

Eu sei que posso atribuir sinon.stub (objname, "funcname") ou sinon.stub ("funcname"), mas esses apenas definem o objeto externo, estou tentando stub a solicitação de função que está dentro da função getTicker.

Algumas ideias em como fazer isso? Talvez eu precise usar um espião também (mas como?) Ou existe uma abordagem melhor para testar a função getTicker acima?

questionAnswers(1)

yourAnswerToTheQuestion