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

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

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

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

    考虑以下文件:

    settings.js

    export default { mySetting: null };
    

    store.js

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

    settingsDemo.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);
    });
    

    在内部 设置Demo.js

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

    "Exploring ES6" :

    请注意,虽然不能更改导入的值,但可以更改它们所引用的对象

    换句话说,不可能分配 settings 但可以更改上的属性 而这些变化将自动被看到,无论它是进口。

    考虑到这一点,这里有一个有效的测试:

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