运行 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 应该也会有所帮助。
我在这里尝试使用 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 应该也会有所帮助。