Jest mock knex fn.now(),但保留其余实现

Jest mock knex fn.now(), but keep rest of implementation

我正在为使用 knex 的服务编写测试,但是,由于 knex 调用多次使用 knex.fn.now(),我的测试会随着时间的推移产生不同的结果。我想知道是否有可能 mock/spy/hijack 对 knex.fn.now() 的内部调用是我可以控制的,同时让其余代码留在其 'real' 实现中。我只能找到完全模拟 knex 的示例,这会使我的测试目的变得毫无意义。

所以我想知道是否可以开玩笑地监听特定的函数调用并在其中插入另一个值。

您可以通过创建文件夹来模拟 Knex 包 __mocks__/knex/index.js

在此文件中,您可以要求真正的 knex 实现、更改它并导出。

它应该看起来像这样:

// __mocks__/knex/index.js
const knex = require('knex');

const fixedTime = new Date();
knex.fn.now = () => fixedTime;

module.exports = knex;