首页 > 解决方案 > 如何使用 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);
});

我能够模拟selectand then,但开玩笑抱怨这catch不是一个函数,而且我对如何模拟它并让我的测试通过的想法已经不多了。 在此处输入图像描述

有什么想法吗?

标签: node.jsunit-testingmockingjestjsknex.js

解决方案


就像@jonrsharpe 所说,您不需要模拟thenandcatch方法。

如果你想测试成功的场景,你应该像这样使用mockResolvedValue方法:db.select.mockResolvedValue(mResponse)then方法将被执行。

如果你想测试失败的场景,你应该像这样使用mockRejectedValue方法:db.select. mockRejectedValue(mError)catch方法将被执行。


推荐阅读