【问题标题】:clear encapsulated value in imported module - Jest js清除导入模块中的封装值 - Jest js
【发布时间】:2022-01-14 19:04:40
【问题描述】:
假设我正在导入 Jest 模块,例如:
let var;
export const getVar = () => {
if(var == null) {
var = Date.now()
}
return var;
}
我正在尝试对此模块进行单元测试,但是,在每个单元测试中,我都必须重置“var”值。我尝试在“beforeEach”方法上使用 require 重新定义模块,但它不起作用。有谁知道如何重置这样的封装值?
【问题讨论】:
标签:
javascript
import
jestjs
【解决方案1】:
使用旧的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");
});
使用动态import 和resetModules
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");
});