我用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分支没有经过测试。
This让我觉得我可以通过一个jest配置来改变它,但由于我不想在全球范围内改变它,但在每个测试的基础上,这无论如何都没有意义。
答案 0 :(得分:1)
尝试将其添加到测试文件的顶部。
jest.mock('Platform', () => {
const Platform = require.requireActual('Platform');
Platform.OS = 'android';
return Platform;
});
const Platform = require('Platform');
您可能需要为iOS创建一个不同的文件,但您在模拟中设置的平台将适用于您的测试规范文件。
答案 1 :(得分:1)
您需要使用Jest预设的haste
属性来模拟每个平台。我建议使用jest-expo
来扩展默认的React Native Jest预设并多次运行测试,每次使用不同的平台进行。
免责声明:遇到相同问题时,我已将此功能添加到
jest-expo
中。