目前我正在使用带有react钩子的函数组件。但是我无法完全测试useState
钩子。考虑这样一个场景,在useEffect
钩子中,我正在做一个API调用,并在useState
中设置值。对于jest/enzyme,我模拟了要测试的数据,但是我无法在jest中设置useState
的初始状态值。const [state, setState] = useState([]);
我想在jest中将初始状态设置为对象数组。我找不到任何类似类组件的setState函数。
目前我正在使用带有react钩子的函数组件。但是我无法完全测试useState
钩子。考虑这样一个场景,在useEffect
钩子中,我正在做一个API调用,并在useState
中设置值。对于jest/enzyme,我模拟了要测试的数据,但是我无法在jest中设置useState
的初始状态值。const [state, setState] = useState([]);
我想在jest中将初始状态设置为对象数组。我找不到任何类似类组件的setState函数。
9条答案
按热度按时间dz6r00yl1#
您可以模拟
React.useState
以在测试中返回不同的初始状态:参考:https://dev.to/theactualgivens/testing-react-hook-state-changes-2oga
dkqlctbz2#
首先,不能在组件中使用解构。例如,不能用途:
相反,您必须用途:
然后在
test.js
文件中:如果在组件中多次使用useState挂接:
hmmo2u0o3#
如果我没记错的话,您应该尽量避免使用内置的钩子,如
useState
和useEffect
,如果使用enzyme的invoke()
很难触发状态改变,那么这可能表明您的组件将从分解中获益。fivyi3re4#
解结构
你不需要使用
React.useState
--你仍然可以在你的组件中解构。但是你需要按照useState调用的顺序来编写测试,例如,如果你想模拟两个useState调用,确保它们是你组件中的前两个useState调用。
在您的组件中:
在您的测试中:
ao218c7q5#
添加以下内容以使用react
在您的代码中,必须使用
React.useState()
来完成此工作,否则它将无法工作然后在测试中添加以下模拟状态值
灵感:Goto
qyswt5oh6#
cygmwpex7#
我花了很多时间,但找到了很好的解决方案,测试多个useState在我的应用程序.
其中newState是我的组件中具有状态字段的对象;
例如:
vlurs2pr8#
我在组件文件中为多个
useState()
Jest模拟使用了以下设置请注意,
useState
模拟只适用于React.useState()
派生。..在test.js中
z0qdvdin9#
React.useState
**这种方法对我很有效:
我的组件
希望这有帮助!