【发布时间】:2018-01-10 21:00:40
【问题描述】:
我正在尝试使用 Jest 测试一个 React 组件。在组件中,需要一个模块,它是一个返回函数对象的工厂函数。
//tracker.js
export default () => {
track: click => dosomething(click);
};
//component.js
import Tracker from './tracker';
const tracker = Tracker();
tracker.track();
//__tests__/component.test.js
import component from '../component';
describe('', () => {
it('tracks the click', () => {
const mockTrack = jest.fn();
jest.mock('../tracker', () => () => ({
track: mockTrack
}));
// do some testing...
expect(mocktrackData).toHaveBeenCalledWith(constants.TRACKING);
});
});
这似乎可行,但是导入到组件中的跟踪器文件不是我的模拟也不是原始的,而是 Jest 基于原始跟踪器文件的 API 的默认模拟。
我在同一个文件中有几个测试,我想测试发送到跟踪器的不同参数。
这可能吗?我在这里做错了什么?
这是伪代码,但足够接近以传达意图。
【问题讨论】:
-
jest.mock应该放在组件导入之前 -
我没有将要模拟的文件导入到测试文件中。此外,我想为每个测试更改模拟。
-
不导入,你在测试什么?
-
我正在测试的文件将我想要模拟的文件作为依赖项导入。我想检查是否使用某些参数调用了模拟。
-
那么在导入要测试的文件之前,你必须
jest.mock你的模块。然后,您可以使用myMockedModule.myMethod.mockImplementation(() => {})在测试中以不同方式模拟每个模块方法
标签: javascript reactjs unit-testing jestjs