【问题标题】:How to set the platform on a per test basis for jest tests?如何在每个测试的基础上为开玩笑测试设置平台?
【发布时间】:2017-03-14 20:22:20
【问题描述】:

我正在用 jest 测试 react-native 组件,我经常在我的样式中使用这样的东西:

import { StyleSheet, Platform } from 'react-native';

export default StyleSheet.create({
  container: {
    paddingTop: Platform.OS === 'ios' ? 30 : 10,
  }
});

我遇到的问题是,在开玩笑的测试中,Platform.OS 总是'ios',这意味着 android 分支没有得到测试。

This 让我觉得我可以通过一个开玩笑的配置来改变它,但因为我不想在全局范围内改变它,但在每个测试的基础上,这无论如何都没有意义。

【问题讨论】:

  • 你试过使用可变环境吗?
  • 这个问题似乎更多是关于具有特定于平台扩展名的文件而不是平台条件,但也许你可以在那里评论你的问题:github.com/facebook/jest/issues/1370
  • 另外,这绝不是一个非常优雅的解决方案,但您可能想尝试github.com/facebook/jest/issues/1738 中提到的方法。即,只需要react-native 并在运行测试之前直接为Platform.OS 赋值。

标签: reactjs react-native jestjs


【解决方案1】:

尝试将此添加到测试文件的顶部。

jest.mock('Platform', () => {
    const Platform = require.requireActual('Platform');
    Platform.OS = 'android';
    return Platform;
});
const Platform = require('Platform');

您可能需要为 iOS 创建一个不同的文件,但是您在模拟中设置的任何平台都适用于您的测试规范文件。

【讨论】:

  • 就是这样!在我的情况下为 android 创建一个不同的文件,只测试这个平台的变体解决了我的问题,覆盖率是 100%!谢谢!
【解决方案2】:

您需要使用 Jest 预设的 haste 属性模拟每个平台。我建议使用jest-expo,它扩展了默认的 React Native Jest 预设并多次运行测试,每次都使用不同的平台。

免责声明:当我遇到同样的问题时,我将此功能添加到 jest-expo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2020-02-06
    • 2020-03-25
    相关资源
    最近更新 更多