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
    },
  ],
})