Javascript Jest:如何使用Jest.genMockFromModule的结果
我正试图模拟firebase模块 在我的Javascript Jest:如何使用Jest.genMockFromModule的结果,javascript,unit-testing,jestjs,Javascript,Unit Testing,Jestjs,我正试图模拟firebase模块 在我的\uuuumocks\uuuu/firebase.js文件中,我简单地把 const mockFirebase = jest.genMockFromModule('firebase'); export default mockFirebase; 在我的代码中,如果我这样做了 import * as firebase from 'firebase'; console.log(firebase); 我明白了 从这一点上,我了解到我正在模拟预期的模块。 我有
\uuuumocks\uuuu/firebase.js
文件中,我简单地把
const mockFirebase = jest.genMockFromModule('firebase');
export default mockFirebase;
在我的代码中,如果我这样做了
import * as firebase from 'firebase';
console.log(firebase);
我明白了
从这一点上,我了解到我正在模拟预期的模块。
我有这样的代码contactKey=firebase.database().ref().child(path.push().key代码>
我的测试失败,出现以下错误:
TypeError: firebase.database is not a function
如果我执行console.log(firebase.default.database)
function serviceNamespace() {return mockConstructor.apply(this,arguments);}
undefined
如果我执行console.log(firebase.default.database())
function serviceNamespace() {return mockConstructor.apply(this,arguments);}
undefined
我该怎么吃这个傻瓜呢?console.log的输出使生成的模拟看起来像是我所期望的(或多或少),但没有任何东西是可调用的。在您的模拟中尝试类似的操作
const push = jest.fn(() => ({ key: 'mockContactKey' }));
const child = jest.fn(() => ({ push }));
const ref = jest.fn(() => ({ child }));
mockFirebase.database = jest.fn(() => ({ ref }));
这就是您的contactKey
获取mockContactKey
所需的全部内容,我相信您需要先访问原型
,如下所示:
firebase.prototype.database()
const mockFirebase = jest.genMockFromModule('firebase').default;
export default mockFirebase;
这很好地解释了这一点。感谢您继续尝试并提供帮助。我知道我可以自己手动模拟所有函数,但我感兴趣的是尽可能多地利用jest.genMockFromModule。为什么我不能访问结果模拟对象上的数据库属性?