Chr*_*lus 10 testing mocking jestjs
我希望这特定于单个测试:
it('should mock the module a single time', () => {
jest.doMock('../../../../../../../components/HighCharts/HighCharts', () => {
return () => <div id="mock-line-chart" />;
});
})
Run Code Online (Sandbox Code Playgroud)
但它不起作用。这适用于整个文件:
jest.mock('../../../../../../../components/HighCharts/HighCharts', () => {
return () => <div id="my-special-div" />;
});
Run Code Online (Sandbox Code Playgroud)
我用的不对吗?doMock 和 mock 的区别在哪里。我是否适合仅针对单个测试进行模块模拟?
Est*_*ask 17
jest.mock
上述悬挂import
在顶层中使用并提升到在一个块中使用时的块(测试功能范围等),对于相同的开始时jest.unmock
。jest.doMock
并jest.dontMock
服务于相同的目的,但没有被提升。
这对于这样的案例很重要:
it('should mock the module a single time', () => {
let originalHighCharts = require('.../HighCharts');
...
jest.doMock('.../HighCharts', ...);
let mockedHighCharts = require('.../HighCharts');
...
})
Run Code Online (Sandbox Code Playgroud)
这doMock
允许特定顺序是在实践中很少有用的,因为嘲笑模块可与进行检索jest.requireActual
,而相同的序列可以不影响依赖因为缓存的嘲笑模块上的其他模块。
那doMock
和dontMock
没有被提升允许将它们一起用于指定的场景来模拟单个测试的模块:
let HighCharts;
jest.isolateModules(() => {
jest.doMock('.../HighCharts', ...);;
HighCharts = require('.../HighCharts');
jest.dontMock('.../HighCharts');
});
Run Code Online (Sandbox Code Playgroud)
缺点是dontMock
导入失败可能无法执行,会影响其他测试,这个需要额外处理。强制执行对大多数测试更可取的默认模块状态可能更直接:
beforeEach(() => {
jest.unmock('.../HighCharts');
jest.resetModules();
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5594 次 |
最近记录: |