reactjs - 在 Jest 中测试 React Component 时,我如何才能等到再次收到 Prop ?

标签 reactjs testing jestjs

我需要测试一个 HOC,它获取数据并将其传递给包装组件。

它在异步获取数据时分几步传递 props。

第一波 Prop 包含 loading ,我设法测试了

第二波 Prop 包含数据 Prop ,但我不知道要等到它到达。我需要某种 eventuallyHasProps 东西..

我正在使用 Jest,react-test-renderer。

有什么方法可以避免设置手动超时?

谢谢

it(
  "first fetch results should be discarded",
  () => {
    // jest.useFakeTimers();

    const fetchMock = jest
      .fn()
      .mockImplementationOnce(() => {
        return new Promise(resolve => setTimeout(resolve(reqSuccess("slow")), 1000));
      })
      .mockImplementationOnce(() => {
        return new Promise(resolve => setTimeout(resolve(reqSuccess("fast")), 100));
      });

    const options = {
      url: props => `http://test.com${props.testArg}`,
      fetchApi: fetchMock
    };

    const WithFetch = withFetch(options)(component);

    // first request
    const testRenderer = renderer.create(<WithFetch />);

    // second request
    testRenderer.update(<WithFetch testArg="test" />);

    return new Promise((resolve, reject) => {
      setTimeout(() => {
        const resultTree = testRenderer.toTree();
        resolve(expect(resultTree.rendered.props.data.data.result).toBe("fast"));
      }, 4000);
    });

    // jest.runAllTimers();
  },
  5000
);

最佳答案

两个选项,使用异步测试:

it("should receive data prop", async () => {
  const someresult = await <Promise call>     
  const secondresult = await <Promise call>     
  expect(someresult).toHaveBeenCalledWith(something);
});

或者返回一个 promise :

it("should receive data prop", () => {
  return new Promise(resolve=> {
       // Your assertions (don't forget to call resolve)
  })
});

关于reactjs - 在 Jest 中测试 React Component 时,我如何才能等到再次收到 Prop ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48685821/

相关文章:

android - 如何在命令行中使用 Android Test Orchestrator?

.net - 用于测试私有(private)方法的非代码生成的转发垫片

android - 如何为未在 Playstore 上发布的 Android 应用程序使用 "testflight"?

javascript - Jest 中的覆盖范围不包括分支

javascript - 如何使用 jest 动态匹配对象值

javascript - 对 spring @ResourceMapping 方法进行 react ,未使用相同的请求参数调用

node.js - 无法使用 react-hls-player npm 包播放 m3u8 文件

reactjs - react : Is it bad practice to import a child component directly rather than pass in as a dependency?

reactjs - jest.mock(module) 和 jest.fn() 有什么区别

javascript - 如何在React组件中进行两次条件检查