【发布时间】:2021-08-22 17:53:23
【问题描述】:
我不确定如何在不连接到 db 的情况下在 nestjs 和 typeorm 中实现单元测试。我尝试了一些技术,但似乎都不起作用。
我的模块看起来像这样。
import { HttpModule, Module } from '@nestjs/common'
import moment from 'moment';
import config from '@app/config'
import { OrdersService } from './services/order.service'
import { FraudOrderChecksService } from './services/fraud-order-checks.service'
import { FraudOrderChecksController } from './controllers/fraud-order-checks.controller'
import { HealthcheckController } from './controllers/healthcheck.controller';
import { TypeOrmModule } from '@nestjs/typeorm'
import { ormconfig } from './entities/ormconfig'
@Module({
imports: [
SharedModule,
HttpModule,
LoggerModule,
ConfigModule.forRoot(config),
TypeOrmModule.forRoot(ormconfig.luminskin as any),
TypeOrmModule.forRoot(ormconfig.meridian as any),
TypeOrmModule.forFeature([...ormconfig.luminskin.entities], 'luminskin'),
TypeOrmModule.forFeature([...ormconfig.meridian.entities], 'meridian'),
...
],
controllers: [
MyController,
...
],
providers: [
...
],
})
export class AppModule { }
我在测试中导入根模块
beforeEach(async () => {
jest.clearAllMocks();
const module: TestingModule = await Test.createTestingModule({
imports: [InternalModule]
}).compile();
...
});
当我尝试运行我的单元测试时,我得到了
[Nest] 93196 - 06/04/2021, 17:43:50 [ExceptionHandler] Unable to connect to the database (mydb). Retrying (1)...
AlreadyHasActiveConnectionError: Cannot create a new connection named "connectionname", because connection with such name already exist and it now has an active connection session.
如何将连接与根模块分离,使其仅在需要时运行。其实更清洁的技术也会被接受。
【问题讨论】:
-
这里有一个大线程来回答这个问题:github.com/typeorm/typeorm/issues/1267
-
@MicaelLevi 看过,但我不确定这将如何在 Nestjs 中实现。任何指针都会有所帮助。
-
我想说的是,不要导入整个
InternalModule,只需加载测试套件所需的提供程序或服务。或者,由于TypeOrmModule.forRoot将尝试连接到您的数据库,您应该模拟'@nestjs/typeorm'以使其在导入TypeOrmModule类时返回您的测试替身。这个我还没试过
标签: unit-testing jestjs nestjs typeorm