testing - 在内存数据库中的NestJs的e2e测试中创建了具有相同名称的多个连接

标签 testing nestjs in-memory-database typeorm

我有使用MySQL配置的TypeORM的NestJs应用程序。我想要进行e2e(集成)测试,因此,我想在以这种方式配置的测试中具有内存数据库:

{
    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是必经之路

关于testing - 在内存数据库中的NestJs的e2e测试中创建了具有相同名称的多个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58220333/

相关文章:

python - 在 pytest 中,如何判断测试是否失败? (从 "request"开始)

typescript - 如何用Jest单元测试覆盖TypeORM @Column装饰器?

python - Python中的内存数据库

java - 多次测试主方法 - Java JUnit

Django Rest Framework 测试 API 响应断言

git - 使用服务器端 Hook 实现 TDD 的红/绿/重构文化

javascript - 测试函数不能同时接受 'done' 回调

node.js - 如何在guard(Resource OwnerGuard)之前执行pipe(Validate ObjectId)?

java - Hsqldb 未填充数据

Redis 分片性能和获取 key 的 o(1) 时间复杂度