【问题标题】:Testing Class with @Injectable Scope / @Inject(REQUEST) NestJS使用@Injectable Scope / @Inject(REQUEST) NestJS 测试类
【发布时间】:2020-12-13 01:19:16
【问题描述】:

我已经设置了一个 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

【问题讨论】:

标签: nestjs nestjs-testing


【解决方案1】:

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

【讨论】:

  • 太棒了,谢谢,虽然你将 req 传递给 useValue,而不是编译。
猜你喜欢
  • 2021-01-30
  • 1970-01-01
  • 2020-12-21
  • 1970-01-01
  • 2013-12-19
  • 2020-11-22
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多