testing - 在带有内存数据库的 NestJs 的 e2e 测试中创建了多个具有相同名称的连接
问题描述
我有配置了 mysql 的 TypeORM 的 NestJs 应用程序。我想要进行 e2e(integration) 测试,因此我希望在我以这种方式配置的测试中拥有内存数据库:
{
type: 'sqlite',
database: ':memory:',
synchronize: true,
dropSchema: true,
entities: [`dist/**/*.entity{.ts,.js}`],
}
以及测试的设置
beforeEach(async () => {
const moduleFixture: TestingModule =
await Test.createTestingModule({imports: [AppModule, UserModule]})
.overrideProvider(TypeOrmConfigService).useClass(MockTypeOrmConfigService)
.compile();
app = await moduleFixture.createNestApplication();
await app.init();
});
. 运行测试时我得到了
AlreadyHasActiveConnectionError: Cannot create a new connection named "default", because connection with such name already exist and it now has an active connection session.
at new AlreadyHasActiveConnectionError (/Users/user/workspace/app/src/error/AlreadyHasActiveConnectionError.ts:8:9)
at ConnectionManager.Object.<anonymous>.ConnectionManager.create (/Users/user/workspace/app/src/connection/ConnectionManager.ts:57:23)
at Object.<anonymous> (/Users/user/workspace/app/src/index.ts:228:35)
at step (/Users/user/workspace/app/node_modules/tslib/tslib.js:136:27)
at Object.next (/Users/user/workspace/app/node_modules/tslib/tslib.js:117:57)
at /Users/user/workspace/app/node_modules/tslib/tslib.js:110:75
at new Promise (<anonymous>)
at Object.__awaiter (/Users/user/workspace/app/node_modules/tslib/tslib.js:106:16)
at Object.createConnection (/Users/user/workspace/app/node_modules/typeorm/index.js:186:20)
at rxjs_1.defer (/Users/user/workspace/app/node_modules/@nestjs/typeorm/dist/typeorm-core.module.js:151:29)
(node:19140) UnhandledPromiseRejectionWarning: AlreadyHasActiveConnectionError: Caught error after test environment was torn down
如果我将设置从 beforeEach 移到 beforeAll 块中,那没关系,但我担心当我创建多个规范时,错误会再次出现。应该如何妥善处理?
编辑:问题是每个测试都在设置应用程序,因此会创建一个新连接。解决方案是使用“keepConnectionAlive:true”,以便所有测试重用相同的连接。
解决方案
keepCOnnectionAlive: true
是要走的路
推荐阅读
- flutter - 为什么要在参数声明之前定义构造函数?
- sql - 有条件地将具有默认值的列添加到 SQL Server 中的现有表
- python - Pandas 根据索引向 Dataframe 列添加值,如果值存在则追加
- python - 根据 Pandas 列中的 True 或 False 从 DataFrame 中选择行
- linux - 调用 makefile 的目标“client_sharedlib”时出错
- java - 如何以 Json 格式获得 keycloak 未经授权的响应
- react-native - 如何在反应导航选项卡导航器中动态制作选项卡
- ios - 应用程序在 [[AKMicrophone alloc]initWith:[[AVAudioFormat alloc]initStandardFormatWithSampleRate:AVAudioPCMFormatFloat32 channels:2]] 上崩溃
- c# - dotnet restore 在 docker-compose build 中非常慢
- reactjs - 动态导入和延迟加载 React 组件