我开始使用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渲染正确的地方?
答案 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
我将在需要时实现这些功能
现在它能按我的预期工作