2016-06-19 6 views
2

다음 모듈이 있습니다.Sinon.js를 사용하여 동적 객체 메소드를 스텁하는 방법은 무엇입니까?

var Sendcloud = require('sendcloud'); 
var sc = new Sendcloud("key1","key2","key3"); 

var service = {}; 

service.restorePassword = function (params, cb) { 
if (!params.to || !params.name || !params.token) { 
    throw "Miss params" 
} 

var defaultTemplate = adminBaseUrl + "reset/token/" + params.token; 

var subject = params.subject || "Letter"; 
var template = params.template || defaultTemplate; 

// Send email 
sc.send(params.to, subject, template).then(function (info) { 
console.log(info) 
if (info.message === "success") { 
    return cb(null, "success"); 
} else { 
    return cb("failure", null); 
} 
}); 

}; 

module.exports = service; 

스터 빙하는 데 문제가 발생했습니다. sc.send 메서드. sinon.js를 사용하여이 점을 정확히 커버하는 방법은 무엇입니까? 아니면 sendcloud 모듈을 교체해야합니까?

+1

시도를 사용하는 예를 들어,' – Lee

답변

3

proxyquiremodule 또는 rewiremodule을 사용해야합니다. 여기

('전송'SendCloud.prototype)를`스텁 = sinon.stub을 proxyquire

var proxyquire = require('proxyquire'); 
 
var sinon = require('sinon'); 
 
var Sendcloud = require('sendcloud'); 
 

 
require('sinon-as-promised'); 
 

 
describe('service', function() { 
 
    var service; 
 
    var sc; 
 

 
    beforeEach(function() { 
 
    delete require.cache['sendcloud']; 
 

 
    sc = sinon.createStubInstance(Sendcloud); 
 

 
    service = proxyquire('./service', { 
 
     'sendcloud': sinon.stub().returns(sc) 
 
    }); 
 
    }); 
 

 
    it('#restorePassword', function(done) { 
 
    sc.send.resolves({}); 
 

 
    var obj = { 
 
     to: 'to', 
 
     name: 'name', 
 
     token: 'token' 
 
    }; 
 

 
    service.restorePassword(obj, function() { 
 
     console.log(sc.send.args[0]); 
 
     done(); 
 
    }); 
 
    }); 
 
});

+0

는 알렉세이을 주셔서 감사합니다! –

관련 문제