使用@Injectable Scope / @InjectREQUESTNestJS测试类

问题描述

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

@Injectable({scope: Scope.REQUEST})
export class MongooseConfigService implements MongooSEOptionsFactory {
  constructor(
    @Inject(REQUEST) private readonly request: Request) {
  }

但是我无法向测试环境提供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);
  });

据我所知,在没有inject且有/没有useValue的情况下进行了尝试,但是this.request在尝试运行测试时仍未定义。

TIA

解决方法

也许尝试仅使用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);
  });