Не удается найти модуль ‘firebase-admin’ из ‘index.cjs.js ‘

#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/*"
      ],
    }
  }
}