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

时间:2018-06-22 13:27:40

标签: reactjs jestjs

在玩笑配置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

但是,两者都需要,某些测试使用一次位置的服务,其他位置使用第二个位置的服务。

我该如何解决?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用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
    });
});

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

答案 1 :(得分:0)

我遇到了同样的问题,因为我有多个同名的模块,但在 /src/ 下的不同路径上。

jest-haste-map: duplicate manual mock found: fetch.service
  The following files share their name; please delete one of them:
    * <rootDir>/src/modules/order/__mocks__/fetch.service.ts
    * <rootDir>/src/modules/restaurant/__mocks__/fetch.service.ts

经过一番研究后,我更新了 jest.config.ts,使其包括:

modulePathIgnorePatterns: ["<rootDir>/.*/__mocks__"]

此更改使警告消失:9