代码之家  ›  专栏  ›  技术社区  ›  JD.

如何在每个测试中以不同的方式模拟克隆的导入依赖关系

  •  4
  • JD.  · 技术社区  · 6 年前

    我有一个导入另一个的文件。我想在每个测试中以不同的方式模拟另一个导入,但要让它通过导入它的文件显示出来。

    我曾尝试过通过google进行各种嘲弄和导入的方法,但都没有奏效。

    考虑以下文件:

    设置.js

    export default { mySetting: null };
    

    商店.js

    import settings from "./settings";
    export default {
      settings: { ...settings },
    };
    

    设置Demo.js

    import store from "./store";
    
    it("default settings", () => {
      expect(store.settings.mySetting).toBe(null);
    });
    
    it("mocked to true", () => {
      expect(store.settings.mySetting).toBe(true);
    });
    
    it("mocked to false", () => {
      expect(store.settings.mySetting).toBe(false);
    });
    

    如何在中模拟这些文件 settingsDemo.js settings.js store.js ?

    注: 这和我的相似 previous question ,但是导入依赖项并更改值的解决方案在本例中不起作用,因为 store 不引用 settings 对象,而是将其克隆为初始值。

    2 回复  |  直到 6 年前
        1
  •  3
  •   Brian Adams    6 年前

    同样的原则也适用于: "while you can't change the value of imports, you can change the objects that they are referring to."

    在这种情况下 store 是包含嵌套 settings 对象。虽然不能简单地分配 商店 store.settings 去别的地方。也可以设置 store.settings.mySetting

    import store from "./store";
    
    it("default settings", () => {
      expect(store.settings.mySetting).toBe(null);  // SUCCESS
    });
    
    it("mocked to true", () => {
      store.settings = { mySetting: true };  // set store.settings to something else
      expect(store.settings.mySetting).toBe(true);  // SUCCESS
    });
    
    it("mocked to false", () => {
      store.settings.mySetting = false;  // set store.settings.mySetting to something else
      expect(store.settings.mySetting).toBe(false);  // SUCCESS
    });
    
        2
  •  0
  •   Forivin    6 年前

    我不确定我是否理解你的问题。听起来你只是想模仿一个简单的物体
    " {settings:{ mySetting: null }}

    let store = {settings:{ mySetting: null }}
    
    it("default settings", () => {
      store.settings.mySetting = null
      expect(store.settings.mySetting).toBe(null);
    });
    
    it("mocked to true", () => {
      store.settings.mySetting = true
      expect(store.settings.mySetting).toBe(true);
    });
    
    it("mocked to false", () => {
      store.settings.mySetting = false
      expect(store.settings.mySetting).toBe(false);
    });