Estou tendo problemas com guardas globais, interceptores e filtros que funcionam durante o tempo de execução, mas não funcionam durante o teste e2e.
Aqui está um exemplo de uma configuração de guarda. O problema é o mesmo para todos os itens do tipo middleware, eles não são acionados a menos que eu os especifique localmente para cada controlador, etc.
Meu módulo principal:
@Module({
imports: [
JwtModule.register({
secret: JWT_PASS,
global: true,
}),
BoothModule,
SessionTypeModule,
],
providers: [
{
provide: APP_GUARD,
useClass: AuthenticationGuard,
},
],
})
export class AppModule {}
Um guarda:
@Injectable()
export class AuthenticationGuard implements CanActivate {
private readonly log = new Logger('AuthenticationGuard');
constructor(private readonly jwtService: JwtService) {}
async canActivate(context: ExecutionContext): Promise<boolean> {
console.log('triggered?!');
....
return true;
}
O log do console funciona, os testes falham quando a lógica de guarda falha.
beforeAll(async () => {
const moduleFixture = await Test.createTestingModule({
imports: [
AppModule,
ClientsModule.register([
{
name: '<name>',
transport: Transport.GRPC,
options: {
url: 'localhost:5001',
package: '<package>',
protoPath: '<path>',
credentials: GRPC.ChannelCredentials.createInsecure(),
},
},
]),
],
}).compile();
app = moduleFixture.createNestApplication();
app.useGlobalInterceptors(new ExceptionInterceptor());
app.connectMicroservice<MicroserviceOptions>({
transport: Transport.GRPC,
options: {
url: 'localhost:5001',
package: SPEEDPHOTO_PACKAGE_NAME,
protoPath: BOOTH_PROTO,
},
});
await app.startAllMicroservices();
await app.init();
const clientGrpc: ClientGrpc = app
.getMicroservices()[0]
.get(BOOTH_SERVICE_NAME);
client = clientGrpc.getService<BoothServiceClient>(BOOTH_SERVICE_NAME);
});
Ele só falha durante o teste.
Se bem me lembro, o
TestingModule.createNestApplication()
cria um aplicativo de base HTTP e, quando for esse o caso, para que os aplicativos RPC façam uso dos aprimoradores vinculados globalmente, você deve passar a opção{ inheritAppConfig: true }
como um segundo parâmetro deconnectMicroservice()