使用 @Injectable Scope / @Inject(REQUEST) NestJS 测试类

Rem*_*uan 10 nestjs nestjs-testing

我已经设置了 MongooseConfigService 来允许我们动态切换某些请求的连接字符串,并尝试正确设置测试。

@Injectable({scope: Scope.REQUEST})
export class MongooseConfigService implements MongooseOptionsFactory {
  constructor(
    @Inject(REQUEST) private readonly request: Request) {
  }
Run Code Online (Sandbox Code Playgroud)

然而,我在提供request测试上下文时遇到了困难。

  let service: Promise<MongooseConfigService>;
  
  beforeEach(async () => {
    const req = new JestRequest();
    
    const module: TestingModule = await Test.createTestingModule({
      providers: [
        MongooseConfigService,
        {
          provide: getModelToken(REQUEST),
          inject: [REQUEST],
          useFactory: () => ({
            request: req,
          }),
        },
      ],
    }).compile();
    
    service = module.resolve<MongooseConfigService>(MongooseConfigService);
  });
Run Code Online (Sandbox Code Playgroud)

据我所知,已经在没有inject和 with/without 的情况下尝试过useValue,但是this.request在尝试运行测试时仍然未定义。

TIA

ada*_*amC 11

也许尝试仅使用 import: [appModule] 实例化测试模块,然后尝试获取服务。另外,尝试使用 overrideprovider 和 usevalue ,如下所示:

let service: Promise<MongooseConfigService>;
  
  beforeEach(async () => {
    const req = new JestRequest();
    
    const module: TestingModule = await Test.createTestingModule({
      imports: [appModule]
    }).overrideProvider(REQUEST)
      .useValue(req)
      .compile();
    
    service = module.resolve<MongooseConfigService>(MongooseConfigService);
  });
Run Code Online (Sandbox Code Playgroud)