jestjs - 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) 确实显示了一个空对象 {}
解决方案
虽然试图窥探不存在的东西analytics().logAppOpen()
。jest.spyOn
analytics.logAppOpen
对于延迟评估的间谍函数,将它们公开为变量更容易:
const mockLogAppOpen = jest.fn();
jest.mock('@react-native-firebase/analytics', () => {
return jest.fn()
.mockReturnValue({ logAppOpen: mockLogAppOpen });
});
这样就可以访问它以进行调用断言。不需要jest.spyOn
已经是间谍的功能。
推荐阅读
- node.js - 环回存储组件 afterRemote/beforeRemote 钩子 destroyContainer 未从另一个模型调用
- ruby-on-rails - 无法在 Heroku 上部署 rails 动态路由器
- python - 在终端上运行 Python 脚本,然后继续使用终端
- java - ExoPlayer 2.8.2 更改 - TrackSelectionHelper 和选择对话框
- windows - 子进程有时会返回空
- ios - 快速解码Base64图像
- ios - ios - 根据屏幕大小调整按钮的宽度和高度
- windows - 菜鸟问:如何将空文件夹推送到我的 BitBucket git repo
- python - 如何计算 Django 中跨字段的值?
- laravel - 为什么验证消息没有与 required_if 一起出现?