具有以下全局动态模块的定义:
// prisma.module.ts
import { DynamicModule, Global, Module } from '@nestjs/common'
import { PrismaService } from 'nestjs-prisma'
@Global()
@Module({})
export class PrismaModule {
static register(options: {
databaseUrl: string
}): DynamicModule {
return {
module: PrismaModule,
providers: [
{
provide: PrismaService,
useFactory: () =>
new PrismaService({
prismaOptions: {
datasources: {
db: {
url: options.databaseUrl,
},
},
},
}),
},
],
exports: [PrismaService],
}
}
}
我正在使用
Test.createTestingModule
来编译和测试一个不是顶级 AppModule
的模块(假设是 MyModule
)。该模块依赖于全局动态模块PrismaModule
,因此我必须使用此 GitHub 问题中提到的技巧来覆盖它:
// app.module.ts
export const prismaModule = PrismaModule.register({
databaseUrl: process.env.DB_URL,
})
@Module({
imports: [
// ...
prismaModule,
// ...
],
})
export class AppModule {
constructor() {}
}
// my-module.test.ts
import { prismaModule } from '../app.module'
// ...
const mockPrismaModule = PrismaModule.register({
databaseUrl: "<some connection string>",
})
const moduleRef = await Test.createTestingModule({
imports: [prismaModule],
controllers: [MyController],
providers: [MyService],
})
.overrideModule(prismaModule)
.useModule(mockPrismaModule)
.compile()
const prismaService = mockPrismaModule.<...>
有没有办法访问动态
PrismaService
在 mockPrismaModule
期间创建的 PrismaModule
的 register()
实例?我尝试过使用 mockPrismaModule.get(PrismaService)
但似乎不能像使用 Test.createTestingModule()
的结果那样使用它。
你应该可以使用
moduleRef.get(PrismaService, { strict: false })