运行 Jest 端到端测试时,Prisma 与 PostgrsQL 打开了太多连接

Lou*_*les 5 jestjs nestjs prisma

我尝试在 NestJS/GraphQL 应用程序上使用 Jest 并使用 Prisma 作为我的 ORM 进行端到端测试。

这里发生的情况是 Prisma 与 Postgres 打开了太多连接,我尝试在每次测试后使用 prisma.$disconnect() 来解决这个问题,但它似乎不起作用......

这是我到目前为止所尝试过的。

import { PrismaService } from '../src/prisma.service';

describe('Users', () => {
  let app: INestApplication;
  const gql = '/graphql';
  let prisma;

  beforeEach(async () => {
    prisma = new PrismaService();

    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  afterEach(async () => {
    await prisma.$disconnect();
  });

  it('Query - Users', async () => {
    //Using prisma to query database
  });
});
Run Code Online (Sandbox Code Playgroud)

我的 Prisma 服务(我从 NestJS 文档Text获取它):

import { INestApplication, Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';

@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
  async onModuleInit() {
    await this.$connect();
  }

  async enableShutdownHooks(app: INestApplication) {
    this.$on('beforeExit', async () => {
      await app.close();
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

这些是我在运行所有测试(连续)后遇到的错误:

在此输入图像描述

我已经浏览过 Prisma 文档,但没有找到任何有关如何使用 NestJS 和 Prisma 正确设置 Jest 环境的信息。

感谢您的帮助 !

Nur*_*ani 3

明确指示 Prisma 仅打开与数据库的一个连接应该可以解决此问题。

您可以通过附加connection_limit=1到连接字符串来完成此操作。

演示连接字符串:

postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public&connection_limit=1
Run Code Online (Sandbox Code Playgroud)

参考prisma 中的连接管理也应该有所帮助。