我无法找出hot来监视React navigationv5中useNavigation
钩子返回的navigate
函数。
我有一个简单的Link
组件:
const Link = props => {
const { to, children, ...restProps } = props;
const navigation = useNavigation();
const handlePress = useCallback(() => navigation.navigate(to), [navigation, to]);
return (
<TouchableOpacity testID="link" onPress={handlePress}>
<Text
{...restProps}
>
{children}
</Text>
</TouchableOpacity>
);
};
字符串
和相应的测试:
jest.mock('@react-navigation/native', () => ({
...jest.requireActual('@react-navigation/native'),
useNavigation: () => ({
navigate: jest.fn(() => 'mocked navigate'),
}),
}));
import { useNavigation } from '@react-navigation/native';
const spy = jest.spyOn(useNavigation, 'navigate');
describe('<Link />', () => {
it('navigates', () => {
const link = render(<Link to="TestScreen">Test link</Link>);
fireEvent.press(link.getByTestId('link'));
expect(spy).toBeCalledTimes(1);
})
});
型
当然这是行不通的,因为在const spy = jest.spyOn(useNavigation, 'navigate');
中,navigate
不是useNavigation
的函数。但是我尝试了无数其他的可能性,我就是不知道如何做到这一点。
基本上,我试图做的是验证,当链接被按下,它调用预期的函数与预期的参数,我希望该函数被模拟出来。
2条答案
按热度按时间hgb9j2n61#
我知道我迟到了,但我有同样的问题,想知道什么时候导航功能被调用。
对于它,我这样模仿了这个函数,所以
mockedNavigate
将是一个jest函数,我可以稍后使用:字符串
这让我可以稍后使用它,在这种情况下,你将不再需要间谍,这应该可以做到这一点:
型
ojsjcaue2#
你好,对于那些寻找vitest你可以使用它像:
字符串
那么expect就像:
型