#javascript #reactjs #firebase #testing #jestjs
#javascript #reactjs #firebase #тестирование #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, чтобы просто протестировать, чем приложение отображает без ошибок?
Ответ №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
Я собираюсь реализовать функции по мере необходимости
Теперь это работает так, как я ожидаю