据我所知,应该这样做,以便useFocusEffect将作为useFocusEffect用于测试(模拟)。我使用useFocusEffect用于fetchData:
useFocusEffect(
useCallback(() => {
fetchData();
}, [fetchData]),
);
字符串
**错误消息:**react-navigation hooks需要导航上下文,但找不到。请确保您没有忘记创建和渲染react-navigation应用容器。如果您需要访问可选的导航对象,可以使用Context(NavigationContext),它可能会返回
软件包版本:
"jest": "^24.9.0",
"react-native": "0.61.2",
"react-navigation": "^4.0.10",
"react-navigation-hooks": "^1.1.0",
"@testing-library/react-native": "^4.0.14",
型
8条答案
按热度按时间tzxcd3kk1#
假设你在测试中渲染你的组件,你需要将它 Package 在一个假的
<NavigationContext>
中。这样做可以让useFocusEffect
查找它需要的东西,以确定该组件是否已被你的应用导航聚焦。这个例子使用了
react-native-testing-library
中的render
。我认为它类似于其他渲染方法。字符串
8qgya5xd2#
这只是@meshantz上述回答的更完整版本。
字符串
j5fpnvbx3#
对于TypeScript,它也需要满足类型要求,所以在我的例子中,它是通过使用
jest.requireActual
完成的:字符串
yduiuuwa4#
我在这个帖子中提出的解决方案有问题/限制,所以我最终用“React.useEffect”来模仿“useFocusEffect”。
它做得很好:我的测试现在是绿色的!
字符串
14ifxucb5#
而不是useFocusEffect,使用useIsFocused和useEffect,代码工作正常。
字符串
gopyfrb36#
useFocusEffect
使用navigation.isFocused()
,可以从jest的renderHookWithProviders
访问。做一个
navigation.isFocused.mockReturnValue(true);
应该就行了!现在刚试过,效果很好。yqyhoc1h7#
创建组件FocusEffects
字符串
使用示例:
型
yfwxisqw8#
如果
useFocusEffect()
中的代码对您的测试没有影响,您可以模拟钩子,如下所示:字符串