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 调用的响应。
这是一个异步问题,您需要添加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)
| 归档时间: |
|
| 查看次数: |
5773 次 |
| 最近记录: |