在玩笑配置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
但是,两者都需要,某些测试使用一次位置的服务,其他位置使用第二个位置的服务。
我该如何解决?
答案 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