NestJS - Mongoose @InjectConnection单元测试

问题描述 投票:3回答:1

我有一个服务,在它的构造函数中使用@InjectConnection装饰器。

我无法为此服务实例化testingModule。抛出以下错误:Nest can't resolve dependencies of the AttachmentsService (?, winston). Please make sure that the argument at index [0] is available in the TestModule context.

服务构造函数:

  constructor(@InjectConnection() private readonly mongooseConnection: Mongoose,
              @Inject(Modules.Logger) private readonly logger: Logger) {
    this.attachmentGridFsRepository = gridfs({
      collection: 'attachments',
      model: Schemas.Attachment,
      mongooseConnection: this.mongooseConnection,
    });

    this.attachmentRepository = this.attachmentGridFsRepository.model;
  }

测试模块构造函数:

const module: TestingModule = await Test.createTestingModule({
  imports: [
    WinstonModule.forRoot({
      transports: [
        new transports.Console({
          level: 'info',
          handleExceptions: false,
          format: format.combine(format.json()),
        }),
      ],
    }),
  ],
  providers: [AttachmentsService, {
    provide: getConnectionToken(''),
    useValue: {},
  }],
}).compile();

service = module.get<AttachmentsService>(AttachmentsService);

我意识到我必须模拟连接对象才能被GridFS调用,但是现在我无法实际构建测试模块。

node.js typescript mongoose gridfs nestjs
1个回答
2
投票

当您不添加显式连接名称时,nest.js将为use the default connection token DatabaseConnection,它由nestjs-mongoose包定义为常量:

export const DEFAULT_DB_CONNECTION = 'DatabaseConnection';

所以你可以使用getConnectionToken('Database')

providers: [AttachmentsService, {
  provide: getConnectionToken('Database'),
  useValue: {},
}]

更新2019年

拉取请求已合并。你现在可以getConnectionToken()

我创建了一个pull request,它允许没有任何参数的getConnectionToken()返回默认的连接标记。

© www.soinside.com 2019 - 2024. All rights reserved.