Reputation: 5061
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
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