Javascript 如何使用Sinon.js存根动态对象方法?

Javascript 如何使用Sinon.js存根动态对象方法?,javascript,node.js,unit-testing,sinon,Javascript,Node.js,Unit Testing,Sinon,我有以下模块 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 defaultTe

我有以下模块

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;

我在stubing
sc.send
方法中遇到问题。如何使用sinon.js正确涵盖这一点?或者我需要更换
sendcloud
模块?

您需要使用
proxyquire
重新布线

下面是使用
proxyquire

var proxyquire=require('proxyquire');
var sinon=要求(“sinon”);
var Sendcloud=require('Sendcloud');
要求(“信诺承诺”);
描述('服务',功能()){
var服务;
var-sc;
beforeach(函数(){
删除require.cache['sendcloud'];
sc=sinon.createStubInstance(Sendcloud);
服务=项目要求(“./服务”{
“sendcloud”:sinon.stub()返回(sc)
});
});
它(“#restorePassword”,函数(完成){
sc.send.resolves({});
var obj={
致:"致",,
姓名:'姓名',
令牌:“令牌”
};
service.restorePassword(obj,function(){
console.log(sc.send.args[0]);
完成();
});
});

});
Try
stub=sinon.stub(SendCloud.prototype,'send')