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
。
基本上,我想确保使用某些属性调用分析方法,但到目前为止它不起作用:
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
。