我有一个简单的测试套件,在某些情况下我想模拟一个模块,在某些情况下不想。然而,jest.mock()
只有在测试之外才能工作。有人知道为什么会这样吗?我做错了什么?
这是我想要模拟的函数的实际导入
import {hasSupport, getCallingCode} from 'utils/countryCallingCode';
这是这个函数的模拟:
jest.mock('utils/countryCallingCode', () => ({
getCallingCode: () => '1',
hasSupport: () => true,
}));
现在,工作场景是:
//imports
//mock
describe('...', () -> {
it('...', () -> {
});
});
型
这不起作用:
//imports
describe('...', () -> {
//mock
it('...', () -> {
});
});
这也不起作用:
//imports
describe('...', () -> {
it('...', () -> {
//mock
});
});
2条答案
按热度按时间3pmvbmvn1#
Jest自动将ES模块中的
jest.mock
调用提升到文件的顶部,在任何import语句之前,这样做是为了允许树中的其他模块使用模拟的模块。Jest文档还提供了一个示例存储库来解释how Jest mocking works。
如果您想阻止这种自动行为,可以使用jest.dontMock。
atmip9wb2#
这对我很有效:How to change the behaviour of a mocked import?
模拟模块(可能也有用):jest.mock(..) not working in 'describe' (TypeError: moduleName.split is not a function)