Я не могу понять, что шпионить в горячем режиме navigate
функция, возвращаемая useNavigation
ловушкой из Реактивная навигация v5.
У меня есть простой 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
. Но я пробовал бесчисленное множество других возможностей, и я просто не могу понять, как это сделать.
По сути, я пытаюсь убедиться, что при нажатии ссылки вызывается ожидаемая функция с ожидаемым параметром, и я хочу функция, которую нужно отключить.