2

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

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

我可以render在我的测试中成功地将它用于 a ,但不能用于 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();
});

我收到一个错误TypeError: Cannot read property 'black' of undefinedrerender有没有办法让重新渲染使用自定义渲染,所以我不必将每个重新渲染都包装在ThemeProvider?

4

1 回答 1

5

您需要重新定义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}),
    }
  };
于 2018-11-23T16:45:12.103 回答