gpt4 book ai didi

node.js - NestJS - Mongoose @InjectConnection 单元测试

转载 作者:搜寻专家 更新时间:2023-10-30 21:09:46 25 4
gpt4 key购买 nike

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

我无法为此服务实例化 testingModule。抛出以下错误:Nest 无法解析 AttachmentsService (?, winston) 的依赖项。请确保索引 [0] 处的参数在 TestModule 上下文中可用。

服务构造函数:

  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 调用,但现在我无法真正构建测试模块。

最佳答案

当你不添加显式连接名称时,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() 返回默认连接 token 。

关于node.js - NestJS - Mongoose @InjectConnection 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54829935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com