【问题标题】: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");
    });
    

    使用动态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");
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2022-01-22
      • 2021-08-01
      • 2021-05-15
      • 2017-09-27
      相关资源
      最近更新 更多