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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从第三方库挂钩返回函数的间谍相关的知识,希望对你有一定的参考价值。

我无法弄清楚要监视反应导航 v5中navigate钩子返回的useNavigation函数。

我有一个简单的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的功能。但是我尝试了无数其他可能性,但我只是想不出该怎么做。

基本上,我要尝试验证的是,当按下链接时,它会调用带有期望参数的期望函数,并且我希望该函数被模拟出来。

答案

嘿,您找到问题的解决方案了吗?

以上是关于从第三方库挂钩返回函数的间谍的主要内容,如果未能解决你的问题,请参考以下文章

C ++中的延迟执行策略

自动挂钩到 Activity 生命周期方法的异步任务库

茉莉花间谍对进口模块(打字稿)

你如何使用 frida 挂钩一个原生的剥离库?

如何从片段返回主要活动

使用啥私有 c++ 函数返回类型来使用 mobilesubstrate 进行挂钩