#javascript #firebase #jestjs
# #javascript #firebase #jestjs
Вопрос:
У меня есть компонент, обновляющий переменные пользователя:
const sendPost = () => {
let userProps = {
name: userName,
profilePic: userPhoto,
numPosts: firebase.database.ServerValue.increment(1)
}
firebase.database().ref(`user/${uid}`).update(userProps);
}
Чтобы протестировать компонент, я хочу создать макет для firebase.database.ServerValue.increment()
использования Jest.
Мой тест до сих пор:
import React from 'react';
import { render, fireEvent, screen, waitFor } from '@testing-library/react';
import { BrowserRouter } from 'react-router-dom';
import NewPost from '../Components/NewPost';
import firebase from '../Functions/Firebase';
import UserContext from '../Functions/UserContext';
import * as GetLevel from '../Functions/GetLevelAndPointsToNextLevel';
test('NewPost -> Users with level < 15 (premium) are allowed to publish new posts', async () => {
jest.spyOn(GetLevel, 'default').mockImplementation(() => [14, '_', '_']);
const userInfo = {
account: 'premium'
};
const snapshot = { val: () => userInfo };
jest.spyOn(firebase, 'database').mockImplementation(() => ({
ref: jest.fn().mockReturnThis(),
on: jest.fn((event, callback) => callback(snapshot)),
off: jest.fn().mockReturnThis(),
once: jest.fn(() => Promise.resolve({val: () => 0})),
push: jest.fn().mockReturnThis(),
update: jest.fn().mockReturnThis(),
transaction: jest.fn().mockReturnThis(),
ServerValue: jest.fn().mockReturnThis()
}));
render(
<UserContext.Provider value = {{user: true}}>
<NewPost/>
</UserContext.Provider>
);
fireEvent.change(screen.getByPlaceholderText('Título...'), { target: { value: 'Some random title' } });
fireEvent.change(screen.getByPlaceholderText('Mensaje...'), { target: { value: 'Some random message' } });
fireEvent.click(document.querySelector('button.bottom'));
await waitFor(() => expect(document.querySelector('.Alert .Message').textContent).toBe('¡Mensaje enviado!'));
});
Проблема в том, что после выполнения теста я получаю следующее:
Ошибка типа: не удается прочитать свойство ‘increment’ undefined
Компонент E2E хорошо работает. Так что это проблема правильной настройки функции.
Как я могу firebase.database.ServerValue.increment()
правильно смоделировать?
Комментарии:
1. Можете ли вы рассказать больше о реализации вашего компонента и его тестировании? Тогда мы могли бы предоставить вам правильное исправление.
2. Функция, которую я хочу создать, находится здесь firebase.google.com/docs/reference/kotlin/com/google/firebase /. … Меня не волнует значение, возвращаемое в макете. Я не уверен, что было бы полезно поделиться дополнительной информацией о моей реализации. Не могли бы вы уточнить, пожалуйста?
3. Я не против, какой пакет вы использовали. Я просто забочусь о том, как вы импортируете вещи и издеваетесь над ними, где вы в настоящее время размещаете свой код. Вот почему я попросил просмотреть весь ваш компонент и тестовые файлы
4. Понял. Я только что отредактировал вопрос, надеюсь, это поможет.
5. Подождите. Предполагается
database
, что это функция, основанная на вашем макете. Вы забыли ее вызвать?firebase.database.ServerValue
(должно бытьfirebase.database().ServerValue
)