首页 > 解决方案 > spyOn @react-native-firebase/分析方法

问题描述

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

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
    })
  })

我的课是:

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) 确实显示了一个空对象 {}

标签: jestjsfirebase-analytics

解决方案


虽然试图窥探不存在的东西analytics().logAppOpen()jest.spyOnanalytics.logAppOpen

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

const mockLogAppOpen = jest.fn();

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

这样就可以访问它以进行调用断言。不需要jest.spyOn已经是间谍的功能。


推荐阅读