清除导入模块中的封装值 - Jest js

clear encapsulated value in imported module - Jest js

假设我正在导入 Jest 模块,例如:

let var;

export const getVar = () => {
    if(var == null) {
        var =  Date.now()
    }

    return var;
}

我正在尝试为此模块进行单元测试,但是,在每个单元测试中我都必须重置“var”值。我试图在“beforeEach”方法上使用 require 来重新定义模块,但它不起作用。有谁知道如何像这样重置封装值?

使用旧的 require 语法和 resetModules

foo.js

let foo;

const getFoo = () => {
  if (!foo) {
    foo = "foo";
  } else {
    foo = "bar";
  }
  return foo;
};

module.exports = { getFoo };

foo.test.js

beforeEach(() => jest.resetModules());

test("first", () => {
  const { getFoo } = require("./foo");
  expect(getFoo()).toBe("foo");
});

test("second", () => {
  const { getFoo } = require("./foo");
  expect(getFoo()).toBe("foo");
});

使用动态 importresetModules

foo.js

let foo;

export const getFoo = () => {
  if (!foo) {
    foo = "foo";
  } else {
    foo = "bar";
  }
  return foo;
};

foo.test.js

import { jest } from "@jest/globals";

beforeEach(async () => {
  jest.resetModules();
});

test("first", async () => {
  const { getFoo } = await import("./foo.js");
  expect(getFoo()).toBe("foo");
});

test("second", async () => {
  const { getFoo } = await import("./foo.js");
  expect(getFoo()).toBe("foo");
});