nestjs-firebase
Version:
@nestjs with firebase
76 lines (68 loc) • 2.25 kB
text/typescript
import * as path from "node:path";
import { Test } from "@nestjs/testing";
import * as admin from "firebase-admin";
import { mock } from "jest-mock-extended";
import { FirebaseConstants } from "./firebase.constants";
import {
FirebaseAdmin,
FirebaseModuleOptions,
FirebaseModuleOptionsFactory,
} from "./firebase.interface";
import { FirebaseModule } from "./firebase.module";
describe("FirebaseModule", () => {
jest.spyOn(admin, "initializeApp").mockReturnValue(mock<admin.app.App>());
const googleApplicationCredential = path.join(
__dirname,
"../../../dummy.firebase.amin.key.json",
);
class TestService implements FirebaseModuleOptionsFactory {
createFirebaseModuleOptions(): FirebaseModuleOptions {
return {
googleApplicationCredential,
};
}
}
describe("forRoot", () => {
it("should provide the firebase admin", async () => {
const module = await Test.createTestingModule({
imports: [FirebaseModule.forRoot({ googleApplicationCredential })],
}).compile();
const firebase = module.get<FirebaseAdmin>(
FirebaseConstants.FIREBASE_TOKEN,
);
expect(firebase).toBeDefined();
});
});
describe("forRootAsync", () => {
describe("when the `useFactory` option is used", () => {
it("should provide the firebase admin", async () => {
const module = await Test.createTestingModule({
imports: [
FirebaseModule.forRootAsync({
useFactory: () => ({ googleApplicationCredential }),
}),
],
}).compile();
const firebase = module.get<FirebaseAdmin>(
FirebaseConstants.FIREBASE_TOKEN,
);
expect(firebase).toBeDefined();
});
});
describe("when the `useClass` option is used", () => {
it("should provide firebase admin", async () => {
const module = await Test.createTestingModule({
imports: [
FirebaseModule.forRootAsync({
useClass: TestService,
}),
],
}).compile();
const firebase = module.get<FirebaseAdmin>(
FirebaseConstants.FIREBASE_TOKEN,
);
expect(firebase).toBeDefined();
});
});
});
});