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
相关产品推荐
相关产品推荐

