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]);
完成();
});
});
});
Trystub=sinon.stub(SendCloud.prototype,'send')谢谢你,亚历克斯!