Reactjs 从第三方库钩子返回的间谍函数

Reactjs 从第三方库钩子返回的间谍函数,reactjs,react-native,jestjs,react-navigation,react-navigation-v5,Reactjs,React Native,Jestjs,React Navigation,React Navigation V5,我无法从React-navigationv5中的useNavigationhook返回的navigate函数中找出要监视的热点 我有一个简单的链接组件: const Link = props => { const { to, children, ...restProps } = props; const navigation = useNavigation(); const handlePress = useCallback(() => navigation.navig

我无法从React-navigationv5中的
useNavigation
hook返回的
navigate
函数中找出要监视的热点

我有一个简单的
链接
组件:

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>
  );
};
const Link=props=>{
const{to,children,…restProps}=props;
const navigation=useNavigation();
const handlePress=useCallback(()=>navigation.navigate(to),[navigation,to]);
返回(
{儿童}
);
};
和相应试验:

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);
  })
});
jest.mock('@react-navigation/native',()=>({
…jest.requireActual(“@react-navigation/native”),
使用导航:()=>({
导航:jest.fn(()=>“模拟导航”),
}),
}));
从'@react-navigation/native'导入{useNavigation};
const spy=jest.spyOn(使用导航,“导航”);
描述(“”,()=>{
它('导航',()=>{
常量链接=渲染(测试链接);
firevent.press(link.getByTestId('link'));
期望(间谍)。等待时间(1);
})
});
当然这是行不通的,因为在
constspy=jest.spyOn(使用导航,'navigate')
导航
不是
使用导航
的功能。但我尝试了无数其他的可能性,我就是不知道怎么做


基本上,我想做的是验证当按下链接时,它是否调用了带有预期参数的预期函数,我希望该函数被模拟出来。

我知道我迟到了,但我也遇到了同样的问题,我想知道什么时候调用了导航函数

为此,我以这种方式模拟了该函数,因此
mockedNavigate
将是一个笑话函数,我可以稍后使用:

const mockedNavigate = jest.fn();

jest.mock('@react-navigation/native', () => {
  return {
    ...jest.requireActual('@react-navigation/native'),
    useNavigation: () => ({
      navigate: mockedNavigate,
    }),
  };
});
这使我以后可以使用它,在这种情况下,您将不再需要进行间谍活动,这应该可以实现以下目的:

expect(mockedNavigate).toHaveBeenCalledTimes(1);