代码之家  ›  专栏  ›  技术社区  ›  dragonfly

具有相同名称的两个模块-模拟问题

  •  3
  • dragonfly  · 技术社区  · 6 年前

    开玩笑式配置 setup.js ,我模拟了两个模块:

    jest.mock('somePath1/Translator');
    jest.mock('somePath2/Translator');
    

    当运行测试时,我得到:

    jest-haste-map: duplicate manual mock found:
      Module name: Translator
      Duplicate Mock path: C:\XXX\dev\YYY\src\components\ZZZ\services\__mocks__\Translator.js
    This warning is caused by two manual mock files with the same file name.
    Jest will use the mock file found in:
    C:\XXX\dev\YYY\src\components\ZZZ\services\__mocks__\Translator.js
     Please delete one of the following two files:
     C:\XXX\dev\YYY\src\common\services\__mocks__\Translator.js
    C:\XXX\dev\YYY\src\components\ZZZ\services\__mocks__\Translator.js
    

    然而,两者都是必需的,有些测试使用来自一个位置的服务,而不是来自第二个位置的服务。

    我怎样才能修好它?

    1 回复  |  直到 6 年前
        1
  •  -1
  •   Alec1017    6 年前

    你可以尝试使用 beforeEach() 打电话来 jest.resetModules() 从里面。然后在逐个测试的基础上模拟您的依赖关系:

    describe("some test", () => {
        beforeEach(() => {
           jest.resetModules();
        });
    
        test("Some test", () => {
            jest.mock("somePath1/Translator");
            // run tests here
        });
    
        test("Some other test", () => {
            jest.mock("somePath2/Translator");
            // run tests here
        });
    });
    

    这将在每次测试之前清除模拟,因此您不应该与文件名发生任何冲突。