Шпионская функция возвращена из стороннего библиотечного хука - PullRequest
0 голосов
/ 28 марта 2020

Я не могу понять, что шпионить в горячем режиме 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. Но я пробовал бесчисленное множество других возможностей, и я просто не могу понять, как это сделать.

По сути, я пытаюсь убедиться, что при нажатии ссылки вызывается ожидаемая функция с ожидаемым параметром, и я хочу функция, которую нужно отключить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...