【问题标题】:E2e tests fail because of the extra opened database connection由于额外打开的数据库连接,E2e 测试失败
【发布时间】:2022-01-19 19:52:51
【问题描述】:

我正在尝试为 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 钩子中我销毁了所有创建的连接。

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

堆栈:

统一更新: 我找到了带有 typeorm 和 e2e 测试的good example of nestjs project。也许它会帮助某人。 对我来说,解决方法是在我当前的项目中使用 prisma。哈哈

UPD 2: 我想这个问题在于我没有提供到我的自定义存储库的数据库连接。因此,每个 repo 都会打开自己的连接并导致错误。 prisma 也发生了同样的错误。因此,如果您使用自定义存储库,请提供数据库连接。

例如

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

prisma 是单例数据库连接

【问题讨论】:

    标签: nestjs typeorm


    【解决方案1】:

    我遇到了这个问题。

    修复

    beforeEach 更改为beforeAll 并将afterEach 更改为afterAll。我不能 100% 确定,但我认为这是由于在调用 beforeEach 时注册了新连接造成的,所以即使您正在破坏 afterEach 中的连接,它仍然被注册。

    【讨论】:

    • 不幸的是,它没有帮助。我认为问题在于在每个模块中注入 TypeOrm 实例。但我没有检查这个理论
    【解决方案2】:

    我想问题在于我没有提供到我的自定义存储库的数据库连接。因此,每个 repo 都会打开自己的连接并导致错误。 prisma 也发生了同样的错误。因此,如果您使用自定义存储库,请提供数据库连接。

    例如

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

    其中 prisma 是单例数据库连接

    【讨论】:

      猜你喜欢
      • 2022-07-11
      • 2022-06-13
      • 2017-04-02
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 2017-05-07
      • 2012-04-10
      • 1970-01-01
      相关资源
      最近更新 更多