我如何开玩笑地模拟 firebase 分析?

How do I mock firebase analitycs with jest?

我有一个使用 firebase.analytics() 的组件,我尝试模拟它。

//__mocks__/firebase/app.mocks.ts   
export const analytics = jest.fn();

当我在第二行尝试这样调用它时出现错误:

firebase.initializeApp(clientCredentials);
firebase.analytics();

错误是TypeError: _app.default.analytics is not a function

用这样的玩笑来嘲笑这些:

jest.mock('firebase/app');
jest.mock('firebase/analytics');

我还应该做点什么吗?

这是一个仅使用 jest.mock(moduleName, factory, options) 方法而不创建 __mocks__ 目录的示例。

index.ts:

import firebase from 'firebase';

function main() {
  const clientCredentials = {};
  firebase.initializeApp(clientCredentials);
  firebase.analytics();
}

export { main };

index.test.ts:

import { main } from './';
import firebase from 'firebase';

jest.mock('firebase', () => {
  return { initializeApp: jest.fn(), analytics: jest.fn() };
});

describe('63008620', () => {
  afterAll(() => {
    jest.resetAllMocks();
  });
  it('should pass', () => {
    main();
    expect(firebase.initializeApp).toBeCalledWith({});
    expect(firebase.analytics).toBeCalledTimes(1);
  });
});

单元测试结果:

 PASS  Whosebug/63008620/index.test.ts (14.665s)
  63008620
    ✓ should pass (7ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 index.ts |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        16.565s