【问题标题】:Using custom mocks for components with jest使用自定义模拟来开玩笑的组件
【发布时间】:2017-04-14 06:05:04
【问题描述】:

我正在编写一个 React-Native 应用程序,其中有一个需要测试的屏幕:

MyScreen.js

import React, { Component } from "react";
import CustomTable from "./CustomTable";

export default MyScreen extends Component {
  render() {
    return <CustomTable />;
  }
}

CustomTable.ios.js

import React, { Component } from "react";
import { View } from "react-native";
import TableView from "react-native-tableview";

export default MyScreen extends Component {
  render() {
    return (
      <View>
        ...some stuff
        <TableView />
      </View>
    );
  }
}

react-native-tableview 调用了一些 iOS 特定代码,所以我通过简单地返回 __mocks__ 文件夹中的 android 版本 (CustomTable.android.js) 来模拟它

__mocks__/CustomTable.ios.js

import CustomAndroidTable from "../CustomTable.android";
export const CustomTable = CustomAndroidTable;

我想做的是用 Jest 测试MyScreen.js,但我希望它使用__mock__/CustomTable.ios。我该如何让它做到这一点? Jest 甚至可以做到这一点吗?我当前的测试文件如下所示:

tests/MyScreen.test.js

import React from "react";
import renderer from "react-test-renderer";
import MyScreen from "../src/MyScreen";

describe("test", () => {
  it("works", () => {
  jest.mock("../src/CustomTable.ios");
  const tree = renderer.create(
    <MyScreen />,
  ).toJSON();
  expect(tree).toMatchSnapshot();
});

但它仍然调用原始版本的CustomTable.ios。我做错了什么?

【问题讨论】:

    标签: javascript reactjs react-native mocking jestjs


    【解决方案1】:

    您应该在套件测试之外调用 jest.mock。它应该在您的导入之后立即出现。

    import React from "react";
    import renderer from "react-test-renderer";
    import MyScreen from "../src/MyScreen";
    
    jest.mock("../src/CustomTable.ios");
    
    describe("test", () => {
      it("works", () => {
      const tree = renderer.create(
        <MyScreen />,
      ).toJSON();
      expect(tree).toMatchSnapshot();
    });
    

    【讨论】:

    • 我尝试了很多解决方案,我发现到处都是,但对我来说,关键是模拟需要在导入的正下方,正如你提到的。谢谢!!
    猜你喜欢
    • 2020-05-14
    • 1970-01-01
    • 2019-04-11
    • 2021-11-17
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    相关资源
    最近更新 更多