在为 React Native 项目编写单元测试时,我希望能够测试基于不同平台的不同快照。
我首先尝试jest.mock
模拟Platform
,但似乎是异步的。当我有两个单独的文件时,这种方法确实有效,但如果可能的话,我更愿意将所有内容保存在一个文件中。
我尝试jest.doMock
了因为文档中的这个片段:
使用 babel-jest 时,对 mock 的调用将自动提升到代码块的顶部。如果您想明确避免此行为,请使用此方法。 https://facebook.github.io/jest/docs/en/jest-object.html#jestdomockmodulename-factory-options
但是,我仍然看到不希望的结果。当我console.log
在 android 测试中时,我看到这Platform.OS
就是我设置的第一个doMock
。
我还尝试将模拟包装在 abeforeEach
中,describe
因为我认为这可能有助于确定范围
http://facebook.github.io/jest/docs/en/setup-teardown.html#scoping
describe('ios test', () => {
it('renders ui correctly', () => {
jest.doMock('Platform', () => {
const Platform = require.requireActual('Platform');
Platform.OS = 'ios';
return Platform;
});
const wrapper = shallow(<SomeComponent />);
const tree = renderer.create(wrapper).toJSON();
expect(tree).toMatchSnapshot();
});
});
describe('android test', () => {
it('renders ui correctly', () => {
jest.doMock('Platform', () => {
const Platform = require.requireActual('Platform');
Platform.OS = 'android';
return Platform;
});
const wrapper = shallow(<SomeComponent />);
const tree = renderer.create(wrapper).toJSON();
expect(tree).toMatchSnapshot();
});
});
关于如何更改模拟平台以在同一文件中进行测试的任何想法?