node.js - NestJS - Mongoose @InjectConnection تست واحد
من یک سرویس دارم که از دکوراتور @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 از توکن اتصال پیشفرض DatabaseConnection استفاده میکند، که به عنوان یک ثابت توسط بسته nestjs-mongoose تعریف شده است:
export const DEFAULT_DB_CONNECTION = 'DatabaseConnection';
بنابراین میتوانید از getConnectionToken('Database') استفاده کنید:
providers: [AttachmentsService, {
provide: getConnectionToken('Database'),
useValue: {},
}]
بهروزرسانی ۲۰۱۹
درخواست کشش ادغام شد. شما اکنون میتوانید getConnectionToken() را دریافت کنید.
من یک درخواست pull ایجاد کردهام که به getConnectionToken() اجازه میدهد بدون هیچ پارامتری، توکن اتصال پیشفرض را بازگرداند.
