我正在为我的 NestJS 项目编写 E2E 测试,但遇到了一个无法解决的问题。
这是我的设置片段
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule], // AppModule imports AuthModule
})
.overrideProvider(APP_GUARD) // Not working
.useClass(MockedAuthGuard)
.compile();
app = moduleFixture.createNestApplication<NestExpressApplication>();
目标是在我的测试中使用MockedAuthGuard
而不是真实的AuthGuard
。
问题是没有效果。它仍然是真实的课程,而不是我的模拟版本。
我尝试的是像这样修改我的模块
@Module({
imports: [],
providers: [
{
provide: APP_GUARD,
useClass: Env.isE2E ? MockedAuthGuard : AuthGuard,
},
],
})
export class AuthModule {}
现在它可以工作了,但我不喜欢这部分Env.isE2E ? MockedAuthGuard : AuthGuard
。我想保持它干净并且只在 E2E 测试中覆盖它。
我在这里缺少什么?overrideProvider
我怎样才能通过使用方法让它发挥作用?