【问题标题】:ReferenceError: Cannot access 'jest_mock_extended_1' before initializationReferenceError:在初始化之前无法访问“jest_mock_extended_1”
【发布时间】:2021-11-22 15:33:01
【问题描述】:

我有以下代码。

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)

【问题讨论】:

  • 嘿,我似乎无法复制这个问题,你能提供一个复制吗?还有两件事。首先,这是一种预感,但based on this PR,您能否检查一下更改DeepMockProxy 导入是否有帮助?其次,如果你愿意,我可以抛出一个带有工作单元测试示例的小型 repo 供你查看。
  • @TasinIshmam 感谢您的评论。当您说更改 DeepMockProxy 时,您建议将其更改为什么?
  • 我的意思是你可以像这样直接导入它:import { mockDeep, mockReset, DeepMockProxy } from 'jest-mock-extended' 使用 2.0.4jest-mock-extended 版本。
  • @TasinIshmam 啊,我刚刚进行了更改。不幸的是,我不断收到同样的错误。我已经更新了帖子,提供了有关该错误的更多信息。
  • 我明白了,是否可以创建一个小型复制 github 存储库,以便我看看?

标签: typescript unit-testing jestjs prisma


【解决方案1】:

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

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

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

所以这意味着在文件本身中会发生触发该错误的模拟。如果您希望它起作用,那么您正在模拟的路径和您在此处导入的路径必须不同。像下面这样的东西

import prisma from "../prismaClient";

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-29
    • 2021-09-10
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2021-09-30
    相关资源
    最近更新 更多