You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS+TypeORM E2E测试报AlreadyHasActiveConnectionError如何解决

NestJS E2E测试数据库连接冲突问题解决记录

问题描述

搭建E2E测试环境时,配置了专用e2e数据库以及fixture加载模块,完成配置后运行测试抛出以下错误:

AlreadyHasActiveConnectionError: Cannot create a new connection named "default", because connection with such name already exist and it now has an active connection session.

已在afterEach钩子中销毁所有创建的连接,但仍无法定位额外连接的创建位置。

涉及技术栈

  • NestJs
  • TypeOrm
  • typeorm-fixtures(第三方fixture生成库)
  • Jest

问题解决进展

临时方案

最初的临时解决方案为替换ORM框架为Prisma。

根因定位及最终解决方案

最终排查到问题根源:未给自定义Repository传递共享的数据库连接实例,导致每个Repository都会独立创建连接,进而触发连接名冲突,该问题在使用Prisma时同样可能出现。

如果项目中用到了自定义Repository,需要统一传入全局共享的单例数据库连接实例,参考实现代码如下:

{
  provide: UserDITokens.UserRepository,
  useFactory: () => new UserRepository(prisma),
}

上述代码中的prisma即为单例的数据库连接实例。

内容的提问来源于stack exchange,提问作者Michael Rerberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:54:02