我正在用jest测试react-native组件,我经常在我的样式中使用这样的东西:
import { StyleSheet, Platform } from 'react-native';
export default StyleSheet.create({
container: {
paddingTop: Platform.OS === 'ios' ? 30 : 10,
}
});
我遇到的问题是,在jest测试Platform.OS
总是'ios'
,这意味着android分支没有得到测试。
这让我认为我可以通过一个jest配置来改变这个,但是因为我不想在全局上改变它,但是在每个测试的基础上,这是没有意义的
尝试将其添加到测试文件的顶部。
jest.mock('Platform', () => {
const Platform = require.requireActual('Platform');
Platform.OS = 'android';
return Platform;
});
const Platform = require('Platform');
您可能需要为iOS创建一个不同的文件,但是您在模拟中设置的任何平台都将适用于您的测试规范文件。
您需要使用Jest预设的haste
属性模拟出每个平台。我建议使用jest-expo
,它扩展了默认的React Native Jest预设,并多次运行测试,每次都使用不同的平台。
免责声明:当我遇到同样的问题时,我将此功能添加到
jest-expo
。