我正在测试一个自定义挂钩,react-testing-library它基本上可以执行以下操作:
function useHook() {
const [state, setState] = useState();
const fetch = async () => {
const response = await httpCall();
if (instanceof response !== Error) {
setState("GOOD")
} else {
setState("BAD")
}
}
return { state, fetch }
}
Run Code Online (Sandbox Code Playgroud)
我的测试文件是这样的:
it("test", async () => {
const { result, waitForNextUpdate } = renderHooks(() => useHook())
await result.current.fetch();
expect(result.current.state).toBe(undefined)
await waitForNextUpdate();
expect(result.current.state).toBe("GOOD") //or at least "BAD"
})
Run Code Online (Sandbox Code Playgroud)
我写这个是因为我调用了应该触发 setState 的异步函数fetch(),我断言尚未发生重新渲染,然后waitForNextUpdate()为了等待此重新渲染,我断言state钩子返回的值现在具有值"GOOD"或"BAD" …