Code Spirit
Code Spirit

Reputation: 5061

Jest cannot find module firebase-admin/storage imported in package

I have a package admin-sdk which is used in multiple projects, has a dependency on firebase-admin and exports a function export function storage(): admin.storage.Storage to get a reference to cloud storage.

This package is used in a nestJS app and works fine but when I run tests with Jest I get module not found error:

● Test suite failed to run

    Cannot find module 'firebase-admin/storage' from 'node_modules/admin-sdk/dist/firebase/storage.js'

    Require stack:
      node_modules/admin-sdk/dist/firebase/storage.js
      node_modules/admin-sdk/dist/firebase/index.js
      node_modules/admin-sdk/dist/index.js
      src/services/provocation/provocation.service.ts
      src/services/provocation/provocation.service.spec.ts

      at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:306:11)
      at Object.<anonymous> (node_modules/admin-sdk/dist/firebase/storage.js:4:19)

node_modules/admin-sdk/storage.ts

import {Bucket} from "@google-cloud/storage";
import {getStorage, Storage} from "firebase-admin/storage";

let _storage: Storage;

const _buckets: Record<string, Bucket> = {};

export function storage(): Storage {
    if (!_storage) {
        _storage = getStorage(); //admin.storage();
    }


    return _storage;
}

export function bucket(name?: string): Bucket {
    let id = name || "";

    if (!_buckets.hasOwnProperty(id)) {
        _buckets[id] = storage().bucket(name);
    }

    return _buckets[id];
}

Both libraries depend on same version of firebase-admin which is ^10.0.2.

So why is this error occuring and how can I fix it?

Upvotes: 4

Views: 1125

Answers (1)

Walleks Miranda
Walleks Miranda

Reputation: 41

Try mapped this manually on 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>',
    },
  ),
...
}

Upvotes: 4

Related Questions