我正在尝试将jest.mock包装到一个函数中,以便可以在多个文件中重复使用它。我的用例是反应钩子,我正在使用打字稿。目前,我的测试文件如下所示:
test.tsx
//some imports
jest.mock('../path/to/hoook/whatever', () => ({
useWhatever: jest.fn()
}))
const mockResult = () => {
return ({
some stuff
};
};
describe('Component', () => {
let wrapper;
beforeEach(() => {
mocked(useWhatever).mockClear();
mocked(useWhatever).mockImplementation(() => mockResult);
wrapper = shallow(
<Component />
);
});
//tests below
});
这工作得很好,但是无论其他组件使用了什么钩子,我都试图包装jest.mock以便在其他测试中重用。我正在尝试做的事情看起来像这样:
模拟
export const mockWhatever = () => jest.mock('../path/to/hoook/whatever', () => ({
useWhatever: jest.fn()
}))
export const mockResult = () => {
return ({
some stuff
};
};
test.tsx
//some imports
mockWhatever();
describe('Component', () => {
let wrapper;
beforeEach(() => {
mocked(useWhatever).mockClear();
mocked(useWhatever).mockImplementation(() => mockResult);
wrapper = shallow(
<Component />
);
});
//tests below
});
以这种方式执行测试时,出现诸如“ TypeError:utils_1.mocked(...)。mockClear不是函数”之类的错误。这样可以包装模拟吗?如果是这样,我可能做错了什么或想念什么?
谢谢
jest.mock
被吊起以上巴贝尔变换进口,这就是为什么这个工程按预期的原因:
import ... from 'whatever';
jest.mock('whatever', ...);
mockWhatever
没有定制的Babel转换就不可能实现相同的目的,因此模块在被模拟之前就被导入了。import
需要替换为require
,为了使模拟生效,可以将import..require
语法用于TypeScript类型安全。
__mocks__
是一种重用Jest提供的模块模拟的方法。考虑到存在__mocks__/whatever.js
模拟模块,它与一起用作模拟模块jest.mock('whatever')
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句