我有下面的代码。
singleton.ts
import prisma from "../prismaClient";
import { mockDeep, mockReset } from "jest-mock-extended";
import { PrismaClient } from "@prisma/client";
import { DeepMockProxy } from "jest-mock-extended/lib/cjs/Mock";
jest.mock("../prismaClient", () => ({
__esModule: true,
default: mockDeep<PrismaClient>(),
}));
beforeEach(() => {
mockReset(prismaMock);
});
export const prismaMock = prisma as unknown as DeepMockProxy<PrismaClient>;prismaClient.ts
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient({
log: [
{
emit: "event",
level: "query",
},
{
emit: "stdout",
level: "error",
},
{
emit: "stdout",
level: "info",
},
{
emit: "stdout",
level: "warn",
},
],
});
export default prisma;我正在遵循prisma的单元测试指南:https://www.prisma.io/docs/guides/testing/unit-testing。我不知道为什么我总是犯这个错误:
此错误消息 ReferenceError:无法在初始化前访问“jest_mock_extended_1”
7 | __esModule: true,
8 |
> 9 | default: mockDeep<PrismaClient>(),
| ^
10 | }));
11 |
12 | beforeEach(() => {
at src/utils/testUtils/singleton.ts:9:12
at Object.<anonymous> (src/utils/testUtils/singleton.ts:1:1)
at Object.<anonymous> (src/resolvers/functions/user.test.ts:1:1)发布于 2022-04-01 08:20:34
问题是导入路径和您正在模拟的路径是相同的。那就是import prisma from "../prismaClient";被嘲笑
jest.mock("../prismaClient", () => ({
__esModule: true,
default: mockDeep<PrismaClient>(),
}));因此,这意味着在文件本身中会发生模拟,从而触发该错误。如果您想让它工作,那么您正在嘲笑的路径和您在这里导入的路径必须不同。像下面这样的东西起作用
import prisma from "../prismaClient";
jest.mock("../../prismaClient", () => ({
__esModule: true,
default: mockDeep<PrismaClient>(),
}));发布于 2022-11-28 18:09:17
导入一个类似乎很奇怪,而您只是为了导出它而对其进行模拟。因此,我创建了deepMock of PrismaClient,将其添加到jest.mock并导出了deepMock。
import { PrismaClient } from '@prisma/client'
import { mockDeep, mockReset, DeepMockProxy } from 'jest-mock-extended'
const prismaMock = mockDeep<PrismaClient>();
jest.mock("../prismaClient", () => ({
__esModule: true,
default: prismaMock
}));
beforeEach(() => {
mockReset(prismaMock);
});
export { prismaMock }https://stackoverflow.com/questions/70068335
复制相似问题