javascript - 带有 Promise 和 Proxyquire 的单元测试对象方法
问题描述
我有一个 User 对象,其中包含一个返回 Promise 的方法 insert。
insert() {
return new Promise(function(resolve, reject) {
if (this.id){
reject("This object is already inserted in base");
}
// Some things here
console.log('Printing something here to test');
// mysql.query('Some query')
resolve(this);
// Some things here
}.bind(this));
}
如果用户对象已经有一个 ID,我想测试该承诺是否被拒绝
我使用我的测试 mocha、chai 和 chai-as-promised。
我想要的是 proxyquire mysql.query 以便它返回一个修复结果,该结果适用于其他测试用例。但现在我正是想尝试插入方法拒绝。
我试图这样做:
it("Inserting user with id should fail", () => {
const proxy = proxyquire.load('../models/Users', {
'./dbc': {
query : function(query, args) {
return new Promise(function(resolve, reject) {
resolve({ insertId : 2});
})
}
}
});
var us = new proxy();
us.id = 3;
us.password = "test";
us.username = "testLogin";
us.mail = "testMail";
us.isAdmin = "false";
expect(us.insert()).to.be.rejected();
});
我不明白的是:
- 首先我的测试失败告诉我:
它给了我这个错误:
TypeError: expect(...).to.be.rejected 不是函数
而且,我的 console.log 发生在拒绝之后,我可以在 npm 测试结果中看到它。最后我还尝试在 if 中输入一些日志以确保它不是问题,实际上它在 if 中,所以似乎调用了拒绝方法但什么也不做。
所以我不知道,我是否以错误的方式使用承诺?还是我的测试方式不对?