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

Prisma is opening too many connections with PostgrsQL when running Jest end to end testing

我在这里尝试使用 Jest 在 NestJS/GraphQL 应用程序和 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
  });
});

我的 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();
    });
  }
}

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

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

感谢您的帮助!

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

您可以通过将 connection_limit=1 附加到您的连接字符串来实现。

演示连接字符串:

postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public&connection_limit=1

在 prisma 中参考 connection management 应该也会有所帮助。