NestJS: невозможно разрешить зависимости общей библиотеки во время тестов e2e.
Я работаю с монорепозиторием Nx, который включает в себя несколько приложений NestJS и общую библиотеку. Общая библиотека содержит настраиваемый подписчик MinimalClass, который импортируется в одно из моих приложений NestJS с помощью импорта AppModule. Хотя приложение NestJS работает нормально, его тесты e2e завершаются неудачей из-за проблем с разрешением зависимостей, связанных с этим подписчиком.
Соответствующие фрагменты кода следующие:
Минимальный подписчик :
@EventSubscriber()
export class MinimalSubscriber implements EntitySubscriberInterface<any> {
constructor(private readonly connection: Connection) {
connection.subscribers.push(this);
}
}
МинимальныйПодписчикМодуль :
@Module({
providers: [MinimalSubscriber],
exports: [MinimalSubscriber],
})
export class MinimalSubscriberModule {}
Этот модуль импортируется в AppModule приложения NestJS :
@Module({
imports: [MinimalSubscriberModule /* more imports */],
// controllers, providers, etc.
})
export class AppModule {}
При запуске тестов e2e я сталкиваюсь со следующей ошибкой:
Nest не может разрешить зависимости MinimalSubscriber (?). Убедитесь, что аргумент Connection с индексом [0] доступен в контексте MinimalSubscriberModule.
Я использую TypeOrmModule.forRoot() во время настройки теста e2e в моем файле e2e.helper.ts:
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [
TypeOrmModule.forRoot(getConfig(pg.port(), pg.host())),
AppModule,
],
})
.overrideProvider(HttpService)
.useClass(MockHttpService)
.compile();
(Обратите внимание, что здесь pg — это контейнер postgres, созданный с помощью тестовых контейнеров.)
Этот метод getConfig определен в orm.config.ts:
export const getConfig = (
port = 5432,
host = process.env["POSTGRES_HOST"] ?? "localhost"
) => {
// dotenv setup and more config
return {
type: "postgres",
host,
port,
entities: [__dirname + "/**/*.entity{.ts,.js}"],
// more config
};
};
Эта ошибка возникает только во время тестов e2e, но не тогда, когда приложение нормально запускается с тем же вызовом TypeOrmModule.forRoot().
Есть ли что-то, чего мне не хватает в моей тестовой настройке e2e, что позволило бы NestJS правильно разрешить зависимость соединения в MinimalSubscriber общей библиотеки?