我正在尝试使用玩笑来测试我的代码,到目前为止,我已经做到了:
const [error, setError] = useState(null)
async function fetchThis() {
try {
if (something) {
myFunction() // i am mocking this
} else {
somethingElse()
}
} catch (err) {
setError(true)
}
}
useEffect(() => {
fetchThis()
}, [])
我这样嘲笑myFunction
:
myFunction.mockImplementationOnce(() => {
throw new Error()
})
因此它成功进入了catch块
但是由于某种原因,它从未将setError()
函数设置为true
开玩笑地测试:
const { queryByText, getByText, getByTestId, rerender, debug, container } = render(
<App {...props} />,
)
rerender(<App {...props} />)
//很明显,我需要重新渲染,一些文档告诉我react不会在同步模式下运行钩子
有什么想法为什么不会这样?
还要清楚一点,它在浏览器中设置为true
,因此在测试中肯定是必需的。
当我这样做时,这甚至都不起作用
useEffect(() => {
setError(true)
}, [])
到底是什么...