TypeError:用玩笑嘲笑时,firebase.analytics不是函数

时间:2020-08-28 00:31:35

标签: javascript reactjs firebase testing jestjs

我开始使用Jest测试我的React应用,正在编写一个基本测试,但有一个例外。测试代码如下

// __test__/App.test.js
import '@babel/polyfill'
import React from 'react';
import App from '../components/App'
import { render } from '@testing-library/react';

jest.mock('firebase/app')
// The error is the same with or without the following line:
firebase.analytics.mockResolvedValue(null)

it("renders without crashing", () => {
  render(<App />);
});

但是当我运行npx jest时,我得到以下输出:

 FAIL  src/__test__/App.test.js
  ● Test suite failed to run

    TypeError: firebase.analytics is not a function

       8 | // Initialize Firebase
       9 | firebase.initializeApp(firebaseConfig);
    > 10 | firebase.analytics();
         |          ^
      11 | 
      12 | const db = firebase.firestore();
      13 | 

应用在外部测试中应能正常运行。

我该如何正确模拟Firebase以简单地测试比App渲染正确的地方?

1 个答案:

答案 0 :(得分:1)

如果有人感兴趣:我找到了解决方法。我在嘲笑我正在使用的功能:

// __mocks__/firebase/app.js

module.exports = (function () {
  const _tareas = { ...initialData }
  return {
    initializeApp: () => null,
    analytics: () => null,
    firestore: () => ({
      collection: () => ({
        get: () => ({
          docs: _tareas.list.map(index => ({
            data: () => _tareas.byId[index],
            id: index,
          }))
        }),
        add: (tarea) => {
          const newIndex = _tareas.list.length
          _tareas.list.push(newIndex)
          _tareas.byId[newIndex] = tarea
        },
      })
    }),
  }
})()

我还必须创建空白文件__mocks__/firebase/analytics__mocks__/firebase/firestore

我将在需要时实现这些功能

现在它能按我的预期工作