gpt4 book ai didi

reactjs - 如何测试异步useEffect?

转载 作者:行者123 更新时间:2023-12-04 15:08:33 28 4
gpt4 key购买 nike

如何测试异步 useEffectreact-testing-libs ?
我有:

// in other file
const getData = () => {
return new Promsise(resolve => setTimeout(() => resolve([1, 2, 3]), 5000));
};

const MyComponent = () => {
const [data, setData] = useState([]);

useEffect(() => {
const fetchData = async () => {
const data = await getData();
setData(data);
};
fetchData();
}, []);

return <div>{data.map(item => <span>{item}</span>)}</div>
};
如何测试这个组件?
我现在的测试:
it('MyComponent test', async () => {
await act( async () => {
render(<MyComponent/>, container);
});

expect(container.innerHTML).toMatchSnapshot();
});
但是act,render不会等待useEffect()。
为什么 ?

最佳答案

react-testing-library 对此有一个干净的解决方案。您可以等待元素出现在 DOM 中,这意味着您的异步 useEffect顺其自然。
它叫waitFor它将在继续执行代码之前等待断言完成。您可以使用其他实用程序,例如 getByTextexpect

it('MyComponent test', async () => {
await act( async () => {
render(<MyComponent/>, container);
});

waitFor(() => {
// I'd look for a real text here that is renderer when the data loads
expect(container.queryElement('span')).toBeDefines();
})

expect(container.innerHTML).toMatchSnapshot();

});

关于reactjs - 如何测试异步useEffect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65635054/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com