NestJS - Mongoose @InjectConnection 单元测试
NestJS - Mongoose @InjectConnection unit testing
我有一个在其构造函数中使用 @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 调用,但现在我无法真正构建测试模块。
当不添加显式连接名时,nest.js会use the default connection tokenDatabaseConnection
,nestjs-mongoose包定义为常量:
export const DEFAULT_DB_CONNECTION = 'DatabaseConnection';
所以你可以使用getConnectionToken('Database')
:
providers: [AttachmentsService, {
provide: getConnectionToken('Database'),
useValue: {},
}]
2019 年更新
拉取请求已合并。您现在可以 getConnectionToken()
.
我创建了一个 pull request,它让 getConnectionToken()
没有任何参数 return 默认连接令牌。
我有一个在其构造函数中使用 @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 调用,但现在我无法真正构建测试模块。
当不添加显式连接名时,nest.js会use the default connection tokenDatabaseConnection
,nestjs-mongoose包定义为常量:
export const DEFAULT_DB_CONNECTION = 'DatabaseConnection';
所以你可以使用getConnectionToken('Database')
:
providers: [AttachmentsService, {
provide: getConnectionToken('Database'),
useValue: {},
}]
2019 年更新
拉取请求已合并。您现在可以 getConnectionToken()
.
我创建了一个 pull request,它让 getConnectionToken()
没有任何参数 return 默认连接令牌。