首页 > 解决方案 > Jest "jest.mock(...) 不会覆盖原始文件

问题描述

所以我在文档中设置了我的模拟(尽管我需要 require 和使用 import 的文档,但这不应该是问题 afaik)

jest.mock('common-bon/lib/utils/events/EventDomains');
const EventDomains = require('common-bon/lib/utils/events/EventDomains');
...
beforeAll(()=>{

EventDomains.mockImplementation(() => {
    return {
        app: 'Placeholder'
    };
  });
});

这正是他们在这里的做法: https ://jestjs.io/docs/en/es6-class-mocks

但它不起作用。测试套件以

TypeError:EventDomains.mockImplementation 不是函数

这 afaik 意味着嘲笑根本不起作用。

关于我需要模拟的上下文: *在源代码中,我调用的函数以:

    handler.fireEvent(domain.app);

其中“域”是我要模拟的:

const domain = EventDomains;
const EventDomains = require('common').utils.getEventDomains();

复杂的“路径”是我在 jest.mock(...) 中使用的,它适用于我不需要更改 mockImplementation 的其他模拟

编辑:我知道它是“jest.mock(...)”部分不起作用,因为当我将函数“mockImplementation”添加到原始文件时,它工作得非常好。[请注意 jest.mock 以及 .mockImplementation 之前的 require 使用完全相同的路径。require 位于测试文件的顶部,而 .mockImplementation 位于“beforeAll”中 [尽管将其直接放在 require 之下并没有什么不同]

标签: mockingjestjs

解决方案


只需跳过“.mockImplementation”部分!

我的解决方案在测试文件中:

    beforeAll(()=>{
    EventDomains.app = 'placeholder'    
    });

而已。不需要复杂的“.mockImplementation”等。


推荐阅读