mocking - 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 之下并没有什么不同]
解决方案
只需跳过“.mockImplementation”部分!
我的解决方案在测试文件中:
beforeAll(()=>{
EventDomains.app = 'placeholder'
});
而已。不需要复杂的“.mockImplementation”等。
推荐阅读
- python - Mac OSX 上的 Matplotlib,python 3.6 不一致且极其脆弱
- python-3.x - 递归给了我一个加数的总和。但是我怎么能指望 Python 在我的函数中不使用全局变量的一些递归呢?
- javascript - CouchDB 文档中的总和值
- python - Django:仅在其个人资料上显示链接到特定用户的约会
- asp.net - ASP.NET 表单的非空验证
- python - 脚本仅在我重新启动 shell 时才有效
- javascript - 本地存储变量 i 未定义
- r - 如何将数据框转换为 3-D 矩阵,其中两列数据框的值形成矩阵的列标题
- c# - 更新数量并将数组保存到文本文件
- javascript - Lambda 通过 While 循环多次调用 DynamoDB DocumentClient