我认为你的问题有点不完整,但我可能知道你在说什么,因为我遇到了类似的问题。
如果您尝试从 prisma 文档中进行集成测试,则需要在集成测试中取消模拟您的 prisma 客户端。否则它仍然会被你的 singleton.ts 文件嘲笑
像这样的东西:
myTest.test.js
jest.unmock("../src/db/prisma");
我做了什么 :
我创建了 2 个测试文件(一个用于集成,另一个用于单元测试:CreateData.unit.test.ts 和 CreateData.int.test。我还创建了 2 个单例文件:
单例.unit.ts(我希望将其应用于我的单元测试)
import { PrismaClient } from '@prisma/client';
import { mockDeep, mockReset, DeepMockProxy, mock } from 'jest-mock-extended';
import prismaClient from '../prismaClient';
jest.mock('../prismaClient', () => ({
__esModule: true,
default: mockDeep<PrismaClient>(),
}));
beforeEach(() => {
mockReset(prismaMock);
});
export const prismaMock = prismaClient as unknown as DeepMockProxy<PrismaClient>;
import { PrismaClient } from '@prisma/client';
import { mockDeep, mockReset, DeepMockProxy, mock } from 'jest-mock-extended';
import prismaClient from '../prismaClient';
jest.mock('../prismaClient', () => ({
__esModule: true,
default: mockDeep<PrismaClient>(),
}));
beforeEach(() => {
mockReset(prismaMock);
});
export const prismaMock = prismaClient as unknown as DeepMockProxy<PrismaClient>;
单例.int.ts(我希望将其应用于我的集成测试)
import prismaClient from '../prismaClient';
afterAll(async () => {
const deleteData = prismaClient.data.deleteMany();
await prismaClient.$transaction([
deleteData,
]);
await prismaClient.$disconnect();
});
export { prismaClient };
不要忘记更新您的jest.config.js(类似的东西)
setupFilesAfterEnv: [
'./src/database/testsSingleton/singleton.unit.ts',
'./src/database/testsSingleton/singleton.int.ts'
],
然后创建您的单元测试和集成测试。创建集成测试时,不要忘记模拟 prisma 客户端:
myTest.int.test.ts
import prismaClient from "<path>/database/prismaClient";
import { CreateData } from "<path>/CreateData"
jest.unmock("<path>/database/prismaClient");
let createData;
let createDate = new Date();
const data = {
id: "randomId1234",
name: "Bob Singer",
email: "bob@gmail.com",
password: "123456",
};
beforeEach(() => {
createData = new CreateData();
});
describe('CreateTrainer', () => {
it("should create new trainer", async () => {
const result = await createData.execute(data);
const newTrainer = await prismaClient.data.findUnique({
where: {
email: "bob@gmail.com"
}
});
console.log(result);
expect(newTrainer?.email).toEqual(trainer.email);
});
});