首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReferenceError:无法在初始化前访问“jest_mock_extended_1”

ReferenceError:无法在初始化前访问“jest_mock_extended_1”
EN

Stack Overflow用户
提问于 2021-11-22 15:33:01
回答 2查看 1.5K关注 0票数 2

我有下面的代码。

singleton.ts

代码语言:javascript
复制
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

代码语言:javascript
复制
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”

代码语言:javascript
复制
       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)
EN

回答 2

Stack Overflow用户

发布于 2022-04-01 08:20:34

问题是导入路径和您正在模拟的路径是相同的。那就是import prisma from "../prismaClient";被嘲笑

代码语言:javascript
复制
jest.mock("../prismaClient", () => ({
  __esModule: true,

  default: mockDeep<PrismaClient>(),
}));

因此,这意味着在文件本身中会发生模拟,从而触发该错误。如果您想让它工作,那么您正在嘲笑的路径和您在这里导入的路径必须不同。像下面这样的东西起作用

代码语言:javascript
复制
import prisma from "../prismaClient";

jest.mock("../../prismaClient", () => ({
  __esModule: true,

  default: mockDeep<PrismaClient>(),
}));
票数 0
EN

Stack Overflow用户

发布于 2022-11-28 18:09:17

导入一个类似乎很奇怪,而您只是为了导出它而对其进行模拟。因此,我创建了deepMock of PrismaClient,将其添加到jest.mock并导出了deepMock。

代码语言:javascript
复制
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 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70068335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档