Jest 测试中如何正确模拟 React 组件的异步 useEffect?
我在用 Jest + React Testing Library 测试一个组件,它在 useEffect 里发起了异步请求。测试总是报“无法在未挂载的组件上执行 setState”,我试过用 await waitFor 包裹断言,但还是不行。
这是我的组件简化版:
useEffect(() => {
const fetchData = async () => {
const data = await api.getData();
setData(data);
};
fetchData();
}, []);
测试代码大概这样写:
render(<MyComponent />);
await waitFor(() => expect(screen.getByText('Loaded')).toBeInTheDocument());
到底该怎么正确处理这种异步副作用的测试?是不是漏了什么清理逻辑?
这破问题我踩过N次坑了,记得一定要在卸载时取消setState操作。