使用 sinon 和 proxyquire 定位嵌套方法
Targeting nested method with sinon and proxyquire
对于下面的 nodejs
代码片段,我将如何使用 proxyquire
和 sinon
存根 send
方法,因为它属于文件 [=16] =]?
我尝试了很多方法,但总是出错。
var emailjs = require("emailjs");
emailjs.server.connect({
user: obj.user,
password: obj.password,
host: obj.host,
port: obj.port,
tls: obj.tls,
ssl: obj.ssl
})
.send(mailOptions, function(error, message){
if (error) {
console.log("ERROR");
context.done(new Error("There was an error sending the email: %s", error));
return;
} else {
console.log("SENT");
context.done();
return;
}
});
到目前为止,在我的测试中,我有以下设置,但得到 Uncaught TypeError: Property 'connect' of object #<Object> is not a function
。
readFileStub = sinon.stub();
sendStub = sinon.stub();
connectStub = sinon.stub().returns(sendStub);
testedModule = proxyquire('../index', {
'fs': {readFile: readFileStub},
'emailjs': {
'server': {
'connect': {
'send': sendStub
}
}
}
});
看起来你快到了。只需分配 connectStub
即可:
readFileStub = sinon.stub();
sendStub = sinon.stub();
connectStub = sinon.stub().returns({
send: sendStub
});
testedModule = proxyquire('../index', {
'fs': {readFile: readFileStub},
'emailjs': {
'server': {
'connect': connectStub
}
}
});
当 connectStub
被调用时,它会 return sendStub
,后者将立即被调用。
编辑:
好的,抱歉 - 将 connectStub
return 设为对象。
对于下面的 nodejs
代码片段,我将如何使用 proxyquire
和 sinon
存根 send
方法,因为它属于文件 [=16] =]?
我尝试了很多方法,但总是出错。
var emailjs = require("emailjs");
emailjs.server.connect({
user: obj.user,
password: obj.password,
host: obj.host,
port: obj.port,
tls: obj.tls,
ssl: obj.ssl
})
.send(mailOptions, function(error, message){
if (error) {
console.log("ERROR");
context.done(new Error("There was an error sending the email: %s", error));
return;
} else {
console.log("SENT");
context.done();
return;
}
});
到目前为止,在我的测试中,我有以下设置,但得到 Uncaught TypeError: Property 'connect' of object #<Object> is not a function
。
readFileStub = sinon.stub();
sendStub = sinon.stub();
connectStub = sinon.stub().returns(sendStub);
testedModule = proxyquire('../index', {
'fs': {readFile: readFileStub},
'emailjs': {
'server': {
'connect': {
'send': sendStub
}
}
}
});
看起来你快到了。只需分配 connectStub
即可:
readFileStub = sinon.stub();
sendStub = sinon.stub();
connectStub = sinon.stub().returns({
send: sendStub
});
testedModule = proxyquire('../index', {
'fs': {readFile: readFileStub},
'emailjs': {
'server': {
'connect': connectStub
}
}
});
当 connectStub
被调用时,它会 return sendStub
,后者将立即被调用。
编辑:
好的,抱歉 - 将 connectStub
return 设为对象。