node.js - 如何使用 jest 模拟 knex 承诺
问题描述
我试图模拟一个 knex 调用,但是,我无法模拟所有的承诺树。我的模拟如下:
jest.mock('../src/db/Client', () => {
const mKnex = {
select: jest.fn().mockReturnThis(),
then: jest.fn((done) => done([list with my data])),
catch: jest.fn(),
};
return jest.fn(() => mKnex);
});
我能够模拟select
and then
,但开玩笑抱怨这catch
不是一个函数,而且我对如何模拟它并让我的测试通过的想法已经不多了。
有什么想法吗?
解决方案
就像@jonrsharpe 所说,您不需要模拟then
andcatch
方法。
如果你想测试成功的场景,你应该像这样使用mockResolvedValue方法:db.select.mockResolvedValue(mResponse)
,then
方法将被执行。
如果你想测试失败的场景,你应该像这样使用mockRejectedValue方法:db.select. mockRejectedValue(mError)
,catch
方法将被执行。
推荐阅读
- regex - Automata - 正则表达式(联合案例)
- python - 用对象反序列化 json
- reactjs - zustand typescript persist 如何键入 store
- botframework - Composer Bot 从 Luis 接收意图,执行“Unknown Intent”而不是匹配“Intent Recognized”
- eslint - ESLint 导入顺序规则 - 不适用于 .scss 文件
- javascript - 在多行表渲染上执行 JavaScript
- amazon-web-services - 推送操作时出错:No definition available (docker-compose.yaml / docker-compose.yml / Dockerfile)
- windows - 文件夹不断重复,原因不明
- c++ - Qt 有类型转换异常
- javascript - 日本日期选择器日历