#firebase #testing
#firebase #тестирование
Вопрос:
Я использовал @firebase/testing
на Jest, но поскольку он устарел и получил указание использовать новый, я решил перейти на @firebase/rules-unit-testing
.
Вот код, в котором я их только что переключил.
import { initializeAdminApp } from "@firebase/rules-unit-testing";
import "babel-polyfill";
it("is ok", async () => {
const admin = initializeAdminApp({ projectId: "my-project" });
try {
const doc = admin.firestore().collection("items").doc("item-1");
await doc.set({ name: "Item 1" });
const ss = await doc.get();
expect(ss.data()?.name).toBe("Item 1");
} finally {
await admin.delete();
}
});
Когда я запускаю этот тест с помощью emu, он выдает «Не удается найти модуль ‘firebase-admin’ из ‘index.cjs.js ‘» ошибка.
Cannot find module 'firebase-admin' from 'index.cjs.js'
3 |
4 | it("is ok", async () => {
> 5 | const admin = initializeAdminApp({ projectId: "my-project" });
| ^
Он проходит, если он старый @firebase/testing
.
Что я пропустил?
- Node.js v14.8.0
- Jest 25.5.4
- firebase 7.21.1
- firebase-tools 8.11.2
- @firebase / тестирование 0.20.11
- @firebase / rules-модульное тестирование 1.0.4
Ответ №1:
firebase-admin
Это пакет npm. Просто установил его, и все заработало.
$ npm install -D firebase-admin
Комментарии:
1. Это действительно должно быть задокументировано! Спасибо, вы спасли мою задницу!
2. Почему -D вариант?? в большинстве случаев эта зависимость потребуется в производстве, поэтому, как официально рекомендовано: npm i firebase-admin — хороший ответ.
Ответ №2:
Я начал использовать firebase-admin @ ^ 10.0.1, и у меня возникла эта ошибка при запуске тестов jest. Не удалось сопоставить «firebase-admin / app» с «firebase-admin / lib / app», как ожидалось. Итак, я сопоставил это вручную в jest.config.ts:
import { pathsToModuleNameMapper } from 'ts-jest/utils';
import { compilerOptions } from './tsconfig.json';
...
export default {
...
moduleNameMapper: pathsToModuleNameMapper(
{
...compilerOptions.paths,
'firebase-admin/*': ['node_modules/firebase-admin/lib/*'],
},
{
prefix: '<rootDir>',
},
),
...
}
Это сработало для меня.
И просто хочу отметить, что мой файл tsconfig.json выглядит следующим образом:
{
"compilerOptions": {
...
"baseUrl": ".",
"paths": {
"modules/*": [
"src/modules/*"
],
"shared/*": [
"src/shared/*"
],
}
}
}