无法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
相关产品推荐
相关产品推荐

