E2e测试由于额外打开的数据库连接而失败



我正在尝试为e2e测试设置环境。我设置了e2e数据库和模块来将固定装置加载到其中。但在所有操作之后,我得到了下一个错误:

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

我不明白哪里是建立额外联系的地方。因为在afterEach钩子中,我破坏了所有创建的连接。

以下是我的代码的一些链接:

  • 测试.e2e-spec.ts
  • Orm配置
  • app.module.ts
  • 测试工具.ts
  • Docker compose

堆栈:

  • 嵌套Js
  • TypeOrm
  • typeorm fixture-生成fixture的库
  • Jest

UPD:我发现了一个带有typeorm和e2e测试的nestjs项目的好例子。也许它会帮助别人。对我来说,修复方法是在我当前的项目中使用prisma。lol

UPD2:我想问题在于我没有提供到自定义存储库的数据库连接。正因为如此,每个回购都会打开自己的连接,从而导致错误。同样的错误也发生在棱镜身上。因此,如果您使用的是自定义转发,请提供数据库连接。

例如

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

其中prisma是数据库连接的单例

我遇到了这个问题。

修复

beforeEach更改为beforeAll,将afterEach更改为afterAll。我不能100%确定,但我认为这是由调用beforeEach时注册新连接引起的,因此即使您正在破坏afterEach中的连接,它仍然是注册的。

我想问题在于我没有提供到自定义存储库的数据库连接。正因为如此,每个回购都会打开自己的连接,从而导致错误。同样的错误也发生在棱镜身上。因此,如果您使用的是自定义转发,请提供数据库连接。

例如

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

其中prisma是数据库连接的单例

最新更新