Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jest:如何使用Jest.genMockFromModule的结果_Javascript_Unit Testing_Jestjs - Fatal编程技术网

Javascript Jest:如何使用Jest.genMockFromModule的结果

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); 我明白了 从这一点上,我了解到我正在模拟预期的模块。 我有

我正试图模拟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。为什么我不能访问结果模拟对象上的数据库属性?