如何在 React 中测试 readFragment?

Posted

技术标签:

【中文标题】如何在 React 中测试 readFragment?【英文标题】:How to test readFragment in React? 【发布时间】:2020-07-03 22:19:38 【问题描述】:

我正在使用 Apollo + React + Jest。

我在 Apollo 缓存中有数据,然后我也在 React 中从中获取数据。

但我在测试时无法获取数据。

readFragmentuseQuery 获取数据的方式不同。

所以我不能用同样的方法在我的单元测试文件中测试readFragment

我尝试模拟 providerclient,但它不起作用。

readFragment在测试中有解决方案吗?

我的反应文件

import React from "react";
import  useApolloClient  from "@apollo/react-hooks";

const FileInfo: React.FC<Props> = props => 
  const client = useApolloClient();
  const file = client.readFragment(
    id: `Rendition-222-333`,
    fragment: gql`
      fragment rendition on Rendition 
        status
        title
      
    `,
  );

  return (
    <>
      <p> file.status </p>
      <p> file.title </p>
    </>
  );

【问题讨论】:

【参考方案1】:

我的朋友给了我一个解决方案,如果有人需要,我在这里发布。

import  useApolloClient  from "@apollo/react-hooks";
jest.mock("@apollo/react-hooks");

describe("<FileInfo/>", () => 
  let useApolloClientMock: jest.Mock;
  beforeEach(() => 
    useApolloClientMock = useApolloClient as jest.Mock;
    useApolloClientMock.mockReturnValue(
      readFragment: jest.fn().mockReturnValue( status: "downloaded", title: "123test" ),
    );
  );

  afterEach(jest.resetAllMocks);

  test("When it renders Then it should not crash", () => 
    const  container  = setup();
    expect(container).toBeTruthy();
  );

);

【讨论】:

以上是关于如何在 React 中测试 readFragment?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Jasmine 中使用 React 测试工具

如何在 SharePoint SPFx + react 项目中配置 jest 单元测试框架

如何在 React 中测试子函数?快照是

如何在使用样式组件的 React 组件中测试字符串“...正在加载”?

如何在 React 测试库中获取 Material-UI 密码输入

如何使用 Jest/Enzyme 在 React 中测试文件类型输入的更改处理程序?