sinon - sinon.js: fake.rejects - 使用 calledWith 进行测试
问题描述
我有一个函数,它在数据库中查找用户——在这种情况下,我想“拒绝”,因为找不到用户。
如果未找到用户,则使用拒绝错误和第二个参数 (false) 调用回调
return Login
.findOne({
where: {
id: decoded.loginId,
expireDate: {
$gt: now,
},
},
})
.then(login => done(null, !!login))
.catch(error => done(error, false));
我伪造 findOne 函数来拒绝:
Login.findOne = sinon.fake.rejects(false);
如何检查我的回调现在是否被正确调用?
// Inside validateToken the above code is implemented
const done = sinon.fake();
await validateToken({
tokenInvalidate: moment().add(1, 'minute').toDate(),
loginId: 1,
}, { server }, done);
done.should.be.calledWith(new Error(false), false);
我尝试了很多参数,但似乎无法在这里找到我应该使用什么作为参数。也许我弄错了文档?我不知道......那是实际的输出:
AssertionError: expected fake to have been called with arguments Error: false, false
Error: false
false
模块:
"sinon": "^6.2.0",
"sinon-chai": "^3.2.0",
提前致谢
解决方案
想通了这个问题...
必须使用sinon.fake.rejects(errorInstance)
而不是 false 或内联创建的错误实例。
在检查中,我必须使用相同的实例:
const error = new Error();
Login.findOne = sinon.fake.rejects(error);
done.should.be.calledWith(error, false);
推荐阅读
- haskell - 为什么这段代码会因 Int -> Int 溢出?
- python - image.show 中的图像未显示任何内容(Python 3 笔记本)
- excel - Excel 宏禁用警告未显示
- c++ - SDL 不打印到控制台
- c# - 运行 SQL Server 查询时出现 C# 异常错误
- python - 重置在 Tensorflow 2 数据集中的实际含义是什么?
- vim - 从 vim 中的每一行中抽出第一个单词
- bash - 尝试在 bash 中使用 `case ... ;;&`,出现“意外标记 '&' 附近的语法错误”
- reactjs - react `Router` 组件如何与 `Route` 组件通信?
- javascript - 如何将数组附加到来自 ipcRenderer 的数据中