如何在每次测试的基础上设置平台进行开玩笑测试?

时间:2016-11-01 16:34:26

标签: reactjs react-native jestjs

我用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配置来改变它,但由于我不想在全球范围内改变它,但在每个测试的基础上,这无论如何都没有意义。

2 个答案:

答案 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中。