Sinon似乎没有从导入的文件中添加方法。与导出const有关吗?
我在console.log中看到“收到的原始消息”。
Main.js
import * as otherActions from 'filters/actions/Other.actions';
describe('filter actions', () => {
it('should log STUBBED MESSAGE', () => {
sinon.stub(otherActions, 'logMessage').callsFake(m => console.log('STUBBED Message'));
const compiled = otherActions.doSomethingAndLogMessage(5, 5);
compiled(message => console.log(`RECEIVED ${message}`), () => {});
});
});
Other.actions.js
export const logMessage = () => console.log("ORIGINAL MESSAGE");
export const doSomethingAndLogMessage = (categoryId, size) => (dispatch, getState) => {
dispatch(logMessage());
};
答案 0 :(得分:1)
之所以出现此问题,是因为在模块上下文中引用该函数时,您正在对导出的模块中的函数进行存根。从模块内部原始引用它时,您无需存根。有很多方法可以解决此问题,但是我认为所有这些都需要您稍微更改生产代码。
一个建议是:
Other.actions.js
export const logger = { message: () => console.log("ORIGINAL MESSAGE") };
Main.js
import * as otherActions from 'filters/actions/Other.actions';
...
sinon.stub(otherActions.logger, 'message')
.callsFake(m => console.log('STUBBED Message'));
重要的是,您要在被测试模块可用的上下文中创建存根。
另一个普遍的评论是,通常,您不想在要测试的模块中模拟或存根函数或方法。通常,单元测试的 unit 是指模块。因此,如果您发现需要在正在测试的同一模块中存根某些东西,那么我建议您的模块边界不正确。