我已经更新了Testing-library,但我在这种情况下很难找到waitForNextUpdate的替代方法(在react-testing-library v13中不再可用https://github.com/testing-library/react-testing-library/issues/1101)。我尝试使用rerender(),但似乎没有帮助:
const mockGetSummary = getSummary as jest.MockedFunction<any>;
test('hook的初始状态', async () => {
mockGetSummary.mockImplementation(() => ({
setOptions: () => ({
call: () => Promise.resolve({mycustomObject}),
}),
}));
const { result, rerender } = renderHook(() => useHomePageData());
expect(result.current).toMatchObject({
loading: true,
stats: null
});
await waitForNextUpdate(); // <--- 如何等待hook执行完毕?
expect(result.current).toMatchObject({
loading: false,
stats: {...}
});
}); Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
在较新版本的React Testing Library中,
waitForNextUpdate()不再可用。相反,您可以使用act函数来处理异步更新,该函数也由@testing-library/react-hooks提供。 尝试以下代码:import { renderHook, act } from '@testing-library/react-hooks'; import { waitFor } from '@testing-library/react'; const mockGetSummary = getSummary as jest.MockedFunction<any>; test('initial state of hook', async () => { mockGetSummary.mockImplementation(() => ({ setOptions: () => ({ call: () => Promise.resolve({ mycustomObject }), }), })); const { result } = renderHook(() => useHomePageData()); expect(result.current).toMatchObject({ loading: true, stats: null, }); // 使用act和waitFor等待异步更新完成 await act(async () => { await waitFor(() => { return !result.current.loading; }); }); expect(result.current).toMatchObject({ loading: false, stats: { ... }, }); });使用act确保组件更新被正确处理