使用react-testing-library使用自定义渲染进行重新渲染

Rut*_*uth 5 react-testing-library

我正在使用react-testing-library并且我有一个自定义渲染:

const customRender = (node, ...options) => {
  return render(
    <ThemeProvider theme={Theme}>
      <MemoryRouter>{node}</MemoryRouter>
    </ThemeProvider>,
    ...options
  );
};
Run Code Online (Sandbox Code Playgroud)

我可以在我的测试中成功使用它render,但不能用于 a rerender

test("shows content once data has loaded", () => {
  const { queryByTestId, rerender, debug } = render(
    <ConnectAccount
      currentUser={{
        loading: true
      }}
    />
  );

  expect(queryByTestId("content")).toBeNull();

  rerender(
    <ConnectAccount
      currentUser={{
        user: {
          name: "Test User"
        }
      }}
    />
  );

  debug();
});
Run Code Online (Sandbox Code Playgroud)

我收到一个TypeError: Cannot read property 'black' of undefined错误rerender。有没有办法让重新渲染使用自定义渲染,这样我就不必将每个重新渲染都包装在 中ThemeProvider

Gio*_*Gpx 7

您需要重新定义该rerender方法。这应该有效:

const customRender = (node, options) => {
  const rendered = render(
    <ThemeProvider theme={Theme}>
      <MemoryRouter>{node}</MemoryRouter>
    </ThemeProvider>,
    options);

  return {
    ...rendered,
    rerender: (ui, options) =>
      customRender(ui, {container: rendered.container, ...options}),
    }
  };
Run Code Online (Sandbox Code Playgroud)

  • `react-testing-library` 项目中关于此事的 Github 问题:https://github.com/testing-library/react-testing-library/issues/218 (2认同)