spyOn @react-native-firebase/analytics 方法

spyOn @react-native-firebase/analytics methods

基本上,我想确保使用某些属性调用分析方法,但到目前为止它不起作用:

Cannot spy the logAppOpen property because it is not a function; undefined given instead

库已成功模拟,因为我可以看到控制台从我的 jest.fn():

中注销
  jest.mock('@react-native-firebase/analytics', () => {
    return () => ({
      logAppOpen: jest.fn(() => console.log('mocked fun called')), //===>shown correctly
    })
  })

我的 class 是:

import analytics from '@react-native-firebase/analytics';

export default class GA {
  appStarted = async () =>{
    console.log('appStarted called'); //==> showing
    await analytics().logAppOpen();
  }
}

我的测试:

it("should log app starting", async () =>{
    const spy = jest.spyOn(analytics, 'logAppOpen') //===>FAILS HERE
    congst ga = new GA();
    await ga.appStarted();
    expect(spy).toHaveBeenCalled();
})

但在我的测试中:console.log(analytics) 确实显示了一个空对象 {}

它是 analytics().logAppOpen(),而 jest.spyOn 试图监视不存在的 analytics.logAppOpen

对于延迟评估的间谍函数,将它们公开为变量更容易:

const mockLogAppOpen = jest.fn();

jest.mock('@react-native-firebase/analytics', () => {
  return jest.fn()
  .mockReturnValue({ logAppOpen: mockLogAppOpen });
});

这样就可以访问它以进行调用断言。对于已经是间谍的函数,不需要 jest.spyOn