Jest 测试通过,但 .. 有控制台消息 您正在尝试访问 Jest 环境被拆除后的属性或方法

Sol*_*ole 7 javascript reactjs jestjs react-test-renderer react-testing-library

我的测试通过了,但有一个控制台引用错误:

您正在尝试访问 Jest 环境被拆除后的属性或方法。

测试:

import {render, screen, cleanup, fireEvent, waitFor } from '@testing-library/react';
import {create, act} from 'react-test-renderer';
import Comp1 from './Comp1';
import ReactDOM from 'react-dom';
import "@testing-library/jest-dom";
import { QueryClient, QueryClientProvider } from 'react-query';

const queryClient = new QueryClient();

it('Should wait for response', () => {
    act(() => {
        waitFor(() => {
        render(<QueryClientProvider client={queryClient}><Comp1 /></QueryClientProvider>);
        expect(screen.getByTestId('loading', {}, { timeout: 2000 })).toBeInTheDocument();
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?这会检查 async/await api 调用的响应。

Nag*_*aba 5

jest.useFakeTimers();只需在测试文件中添加import 语句后即可


Man*_*anu 2

这是一个异步问题,您需要添加async, wait

it('Should wait for response', async () => {
  render(
    <QueryClientProvider client={queryClient}>
      <Comp1 />
    </QueryClientProvider>
  );

  await waitFor(() => {
        expect(screen.getByTestId('loading', {})).toBeInTheDocument();
   });
});
Run Code Online (Sandbox Code Playgroud)

===编辑===

您可以使用findBy()(已经包含waitFor())来清理测试:

it('Should wait for response', async () => {
  render(
    <QueryClientProvider client={queryClient}>
      <Comp1 />
    </QueryClientProvider>
  );

  const loading = await screen.findByTestId('loading')
  expect(loading).toBeInTheDocument();
});
Run Code Online (Sandbox Code Playgroud)