2017-08-05 228 views
0

我试图嘲弄火力模块玩笑:如何消耗的jest.genMockFromModule

在我__mocks__/firebase.js文件的结果,我只是把

const mockFirebase = jest.genMockFromModule('firebase'); 
export default mockFirebase; 

,并在我的代码,如果我做

import * as firebase from 'firebase'; 
console.log(firebase); 

我得到

{ default: 
    { 
    __esModule: true, 
    initializeApp: 
    { [Function: initializeApp] 
     _isMockFunction: true, 
     getMockImplementation: [Function], 
     mock: [Getter/Setter], 
     mockClear: [Function], 
     mockReset: [Function], 
     mockReturnValueOnce: [Function], 
     mockReturnValue: [Function], 
     mockImplementationOnce: [Function], 
     mockImplementation: [Function], 
     mockReturnThis: [Function], 
     mockRestore: [Function] }, 
    app: 
    { [Function: app] 
     _isMockFunction: true, 
     getMockImplementation: [Function], 
     mock: [Getter/Setter], 
     mockClear: [Function], 
     mockReset: [Function], 
     mockReturnValueOnce: [Function], 
     mockReturnValue: [Function], 
     mockImplementationOnce: [Function], 
     mockImplementation: [Function], 
     mockReturnThis: [Function], 
     mockRestore: [Function], 
     App: [Object] }, 
    apps: [], 
    Promise: 
    { [Function: Promise] 
     _isMockFunction: true, 
     getMockImplementation: [Function], 
     mock: [Getter/Setter], 
     mockClear: [Function], 
     mockReset: [Function], 
     mockReturnValueOnce: [Function], 
     mockReturnValue: [Function], 
     mockImplementationOnce: [Function], 
     mockImplementation: [Function], 
     mockReturnThis: [Function], 
     mockRestore: [Function], 
     _37: null, 
     _87: null, 
     _61: [Object], 
     resolve: [Object], 
     all: [Object], 
     reject: [Object], 
     race: [Object], 
     denodeify: [Object], 
     nodeify: [Object], 
     enableSynchronous: [Object], 
     disableSynchronous: [Object] }, 
    SDK_VERSION: '4.2.0', 
    INTERNAL: 
    { registerService: [Object], 
     createFirebaseNamespace: [Object], 
     extendNamespace: [Object], 
     createSubscribe: [Object], 
     ErrorFactory: [Object], 
     removeApp: [Object], 
     factories: [Object], 
     useAsService: [Object], 
     deepExtend: [Object], 
     node: [Object], 
     Promise: [Object] }, 
    auth: 
    { [Function: serviceNamespace] 
     _isMockFunction: true, 
     getMockImplementation: [Function], 
     mock: [Getter/Setter], 
     mockClear: [Function], 
     mockReset: [Function], 
     mockReturnValueOnce: [Function], 
     mockReturnValue: [Function], 
     mockImplementationOnce: [Function], 
     mockImplementation: [Function], 
     mockReturnThis: [Function], 
     mockRestore: [Function], 
     Auth: [Object], 
     Error: [Object], 
     EmailAuthProvider: [Object], 
     FacebookAuthProvider: [Object], 
     GithubAuthProvider: [Object], 
     GoogleAuthProvider: [Object], 
     TwitterAuthProvider: [Object], 
     OAuthProvider: [Object], 
     PhoneAuthProvider: [Object], 
     RecaptchaVerifier: [Object] }, 
    User: 
    { [Function: S] 
     _isMockFunction: true, 
     getMockImplementation: [Function], 
     mock: [Getter/Setter], 
     mockClear: [Function], 
     mockReset: [Function], 
     mockReturnValueOnce: [Function], 
     mockReturnValue: [Function], 
     mockImplementationOnce: [Function], 
     mockImplementation: [Function], 
     mockReturnThis: [Function], 
     mockRestore: [Function], 
     Cg: [Object], 
     Sc: [Object] }, 
    database: 
    { [Function: serviceNamespace] 
     _isMockFunction: true, 
     getMockImplementation: [Function], 
     mock: [Getter/Setter], 
     mockClear: [Function], 
     mockReset: [Function], 
     mockReturnValueOnce: [Function], 
     mockReturnValue: [Function], 
     mockImplementationOnce: [Function], 
     mockImplementation: [Function], 
     mockReturnThis: [Function], 
     mockRestore: [Function], 
     Reference: [Object], 
     Query: [Object], 
     Database: [Object], 
     enableLogging: [Object], 
     INTERNAL: [Object], 
     ServerValue: [Object], 
     TEST_ACCESS: [Object] }, 
    default: [Circular] 
    } 
} 

从这我明白,我正在嘲笑模块的预期。

我有一些代码,做这样的东西
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);} 

如果我这样做console.log(firebase.default.database())我收到

undefined 

我该如何消费这个模拟? console.log的输出使得它看起来像生成的模拟是我期望的(或多或少),但没有任何可调用的东西。

回答

0

尝试这样的事情在你的mock -

const push = jest.fn(() => ({ key: 'mockContactKey' })); 

const child = jest.fn(() => ({ push })); 

const ref = jest.fn(() => ({ child })); 

mockFirebase.database = jest.fn(() => ({ ref })); 

这是所有你需要为你contactKey获得mockContactKey

+0

感谢您继续尝试和帮助。我知道我可以自己手动模拟所有的功能,但我有兴趣尽可能利用jest.genMockFromModule。为什么我无法访问生成的模拟对象上的数据库属性? –