Problema de inyección de dependencia para el paquete `@ntegral/nestjs-sentry` en la aplicación NestJS.
Tengo un problema con este paquete @ntegral/nestjs-sentry en nestjs. Tengo un registro personalizado que utilizo en mi aplicación.
@Injectable()
export class CustomLogger implements LoggerService {
constructor(@InjectSentry() private readonly client: SentryService) {}
log(message: any, ...optionalParams: any[]) {
this.client.instance().captureMessage(message, ...optionalParams);
}
}
Luego lo inyecto en el controlador de usuarios y en user.controller.spec.ts
describe('UsersController', () => {
let controller: UsersController;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [UsersController],
providers: [
CustomLogger,
UsersService,
SentryService,
],
}).compile();
controller = module.get<userscontroller>(UsersController);
});
it('should be defined', () => {
expect(controller).toBeDefined();
});
});
Recibo este error
FAIL src/users/users.controller.spec.ts (9.449 s)
● UsersController › should be defined
Nest no puede resolver las dependencias de CustomLogger (?). Asegúrese de que el argumento Symbol(SentryToken) en el índice [0] esté disponible en el contexto de RootTestModule.
Soluciones potenciales:
- Si Symbol(SentryToken) es un proveedor, ¿forma parte del RootTestModule actual?
- Si Symbol(SentryToken) se exporta desde un @Module separado, ¿ese módulo se importa en RootTestModule?
@Module({
imports: [ /* el módulo que contiene Symbol(SentryToken) */ ]
})
He intentado agregar SentryService a los proveedores del spec, pero eso no soluciona el error. ¿Alguien se ha enfrentado a esto y cómo lo han solucionado?
davy.ai
El mensaje de error indica que Nest no puede resolver la dependencia de
CustomLogger
porque no puede encontrar el proveedorSymbol(SentryToken)
. Esto es probablemente porque no has importado el módulo@ntegral/nestjs-sentry
en tu módulo de prueba.Para solucionar esto, debes actualizar tu módulo de prueba para incluir el
SentryModule
y elSentryService
. Aquí tienes un ejemplo:En este ejemplo, he agregado el
SentryModule
al array deimports
del módulo de prueba y también he proporcionado una implementación simulada delSentryService
. Esto permitirá que la prueba se ejecute sin errores.