如何为react-native和web运行Jest测试

时间:2017-01-05 10:15:33

标签: reactjs react-native jestjs

我想为 Button.js,Button.ios.js,Button.androind.js 运行我的测试,并为不同的平台拍摄单独的快照。我怎么能这样做?

import "react-native";
import React from "react";
import renderer from "react-test-renderer";
import Button from "..../Button";

test('Example of test', () => {
    const c = renderer.create(
        <Button text="asd" />
    );
    expect(c.toJSON()).toMatchSnapshot();
});

此示例仅为本机Button创建快照,并忽略常规HTML组件。

版本:

 "react-native": "^0.39.2",
 "jest": "^18.0.0",

1 个答案:

答案 0 :(得分:0)

假设您使用react-native-web来获取HTML输出,您应该知道Jest实际上不会通过webpack运行您的react-native代码,因此它不会处理反应原生代码 - &GT; react-native-web别名,因此您永远不会在快照中看到实际的HTML。

也就是说,您仍然可以确保您的代码在您选择的平台上按预期工作。在我们的例子中,我们有时为android和/或web提供不同的代码分支。我们构建了这个简单的帮助器,以便我们轻松模拟不同的平台:

const withPlatform = (platform: string, testFunction: () => void) => {
  const origOS = Platform.OS;
  Platform.OS = platform;
  try {
    testFunction();
  } finally { // eslint-disable-line  brace-style
    Platform.OS = origOS;
  }
};

导入测试后,您可以执行以下操作:

  describe('on the web', () => {
    it('should render correctly', () => {
      withPlatform('web', () => {
        expect(renderer(<SomeComponent />)).toMatchSnapshot(); 
      });
    });
  });