You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法Mock/Stub Knex方法:knex('表名')形式实例Mock失败

Knex 实例化导致 Sinon Stub 失效问题

业务代码

const getItem = async (itemId) => {
  const item = await knex('item').where('id', itemId).first();

  console.log(item);
};

测试代码

sinon.stub(knex, 'first').resolves({ id: 1 });

Knex 导入方式

const knex = require('Knex')(config);

我推测 knex('table_name') 会创建新的实例,导致目标方法无法被Mock。


更新:可行但非偏好的方案

只有改用 knex.from('table_name') 的写法,同时按如下方式Stub才能生效:

Stub 代码

const knexStub = sinon.stub(knex, 'from').callsFake(() => ({
      where: () => ({
        first: () => null
      }),
      insert: () => sinon.fake()
    }));

修改后的业务代码

const getItem = async (itemId) => {
  const item = await knex.from('item').where('id', itemId).first();

  console.log(item);
};

我更倾向于使用 knex('table_name') 的写法,但目前找不到对应的Mock方式,希望能解决这个问题。


内容的提问来源于stack exchange,提问作者AlfredoDaAs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:59:56