nestjs 应用程序中“@ntegral/nestjs-sentry”包的依赖注入问题
Dependency injection issue for `@ntegral/nestjs-sentry` package in nestjs app
我在 nestjs 中遇到这个包 @ntegral/nestjs-sentry
的问题。我有一个在我的应用程序中使用的自定义记录器
@Injectable()
export class CustomLogger implements LoggerService {
constructor(@InjectSentry() private readonly client: SentryService) {}
log(message: any, ...optionalParams: any[]) {
this.client.instance().captureMessage(message, ...optionalParams);
}
}
然后我将其注入用户控制器并在 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();
});
});
我收到这个错误
FAIL src/users/users.controller.spec.ts (9.449 s)
● UsersController › should be defined
Nest can't resolve dependencies of the CustomLogger (?). Please make sure that the argument Symbol(SentryToken) at index [0] is available in the RootTestModule context.
Potential solutions:
- If Symbol(SentryToken) is a provider, is it part of the current RootTestModule?
- If Symbol(SentryToken) is exported from a separate @Module, is that module imported within RootTestModule?
@Module({
imports: [ /* the Module containing Symbol(SentryToken) */ ]
})
我已尝试将 SentryService
添加到规范提供程序,但这并没有解决错误。有没有人遇到过这个,你是怎么解决的。
我 运行 在完全相同的问题上。似乎是该库为其自己的 Inject 注释使用了不同的标记。我能够通过使用为 SentryService 模拟提供的令牌在我的测试中修复它。
import { SENTRY_TOKEN } from '@ntegral/nestjs-sentry';
// ...
const module: TestingModule = await Test.createTestingModule({
providers: [
// ...
{
provide: SENTRY_TOKEN,
useValue: { debug: jest.fn() }, // provide SentryService Mock here
},
],
})
我在 nestjs 中遇到这个包 @ntegral/nestjs-sentry
的问题。我有一个在我的应用程序中使用的自定义记录器
@Injectable()
export class CustomLogger implements LoggerService {
constructor(@InjectSentry() private readonly client: SentryService) {}
log(message: any, ...optionalParams: any[]) {
this.client.instance().captureMessage(message, ...optionalParams);
}
}
然后我将其注入用户控制器并在 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();
});
});
我收到这个错误
FAIL src/users/users.controller.spec.ts (9.449 s)
● UsersController › should be defined
Nest can't resolve dependencies of the CustomLogger (?). Please make sure that the argument Symbol(SentryToken) at index [0] is available in the RootTestModule context.
Potential solutions:
- If Symbol(SentryToken) is a provider, is it part of the current RootTestModule?
- If Symbol(SentryToken) is exported from a separate @Module, is that module imported within RootTestModule?
@Module({
imports: [ /* the Module containing Symbol(SentryToken) */ ]
})
我已尝试将 SentryService
添加到规范提供程序,但这并没有解决错误。有没有人遇到过这个,你是怎么解决的。
我 运行 在完全相同的问题上。似乎是该库为其自己的 Inject 注释使用了不同的标记。我能够通过使用为 SentryService 模拟提供的令牌在我的测试中修复它。
import { SENTRY_TOKEN } from '@ntegral/nestjs-sentry';
// ...
const module: TestingModule = await Test.createTestingModule({
providers: [
// ...
{
provide: SENTRY_TOKEN,
useValue: { debug: jest.fn() }, // provide SentryService Mock here
},
],
})