【发布时间】:2019-09-12 01:57:40
【问题描述】:
我需要存根 mh 对象的 sendMandrill 方法。
查看我的测试文件(mail.js):
let MailHandler = require('../../modules/mail.handler.module');
...
let api = (router, parser) => {
let send = async (req, res, next) => {
let mh = new MailHandler();
mh.sendMandrill();
...
}
...
return router.post('/mail/send', parser.json(), send);
}
module.exports = api;
...
我的测试(mail.spec.js):
let stRequest = require('supertest');
let MailHandler = require('../../modules/mail.handler.module');
describe('my test', () => {
beforeEach(() => {
sinon.stub(MailHandler.prototype, 'sendMandrill', () => true);
})
it('stubs sendMandrill!', done => {
stRequest(app)
.post('/mail/send')
.end((err, resp) => {
done();
});
})
})
目前我收到以下错误:
TypeError: Cannot stub non-existent own property sendMandrill
添加 mail.handler.module - 参见下面的 mailHandler / sendMandrill 代码:
module.exports = mailHandler;
function mailHandler() {
...
var mandrill = require('../modules/mandrill');
var handler = {
sendMandrill: sendMandrill,
...
};
return handler;
function sendMandrill() {
mandrill.messages.sendTemplate({
message: {...}
});
}
...
}
【问题讨论】:
-
你能发一个邮件处理模块的sn-p吗?
-
@WakeskaterX 为什么这有关系?将 MailHandler 视为必须实例化的泛型类,并且必须存根的方法位于生成的对象中。
-
尝试将:
sinon.stub(MailHandler.prototype, 'sendMandrill', () => true);更改为:sinon.stub(MailHandler, 'sendMandrill', () => true);阅读更多:medium.com/@alfasin/stubbing-with-sinon-4d6539caf365 -
谢谢@alfasin - 不幸的是我得到了同样的错误。
-
也就是说
MailHandler没有这个功能。你确定你导入正确吗?尝试用调试器踩一下,看看MailHandler长什么样子