javascript - 开玩笑的模拟范围是什么?
问题描述
总之,我想知道:
- 是否包含模拟以测试文件或影响多个文件?
- jest 作用域与 JavaScript 作用域相同吗?最内部范围内的模拟优先于具有相同名称的外部/全局模拟。
- 一个后续问题可能是:哪些 jest mock 方法适用于单元,哪些适用于本地和全局范围?
例如,在以下文件系统中:
rootFolder/
node_modules/
externalModule/
- index.js
__mocks__/
- externalModule.js
src/
- fileA.js
- fileB.js
- internalModule.js
__mocks__/
internalModule.js
__tests__/
- fileA.spec.js
- fileB.spec.js
我有以下问题:
- fileA.spec.js
jest.mock('../internalModule, () => customImplementation)
会影响fileB.spec.js ,反之亦然? - 同样,
jest.mock('externalModule', () => customImplementation)
在fileA.spec.js中是否会影响fileB.spec.js,反之亦然?做`jest.mock('模拟外部模块(node_modules) - 全局模拟如何工作?它们会跨文件自动加载还是我必须明确地
jest.mock('externalModule')
进行初始化 - 会
jest.mock('externalModule', () => customImplementation)
优先于全局模拟吗?它会覆盖跨文件的全局模拟吗? - 会
jest.spyOn(internalModule, 'someFunc').mockImplementationOnce(..)
在单元的生命周期内模拟实现,还是只调用一次就someFunc()
可以重置功能? - 根据文档
jest.doMock
,相反jest.mock
,不会将模拟“提升”。但是,在哪里?文件?它会在单元结束时自动取消模拟或重置它吗?还是会影响未来的单位? - 对于全局模拟,是否会
jest.unmock('externalModule')
为每个文件重置它?
我看到了非常不一致的行为,并且没有明确解释这一点的文档。此外,我发现文档要么无处不在,要么不够具体。
提前致谢。
PS我发现了其他类似标题的问题,例如How to limit the scope of Jest mocked functions to a single test和Scoping in Jest when mocking functions,但他们没有回答我的问题。
解决方案
推荐阅读
- excel - 您可以引用具有可变地址的 Excel 单元格吗?
- java - Java桌面客户端nodejs服务器使用socketio,socket未连接
- python - 将字符串的 TFIDF 相似度计算为 2 个 Pandas 列,并在新列中输出相似度得分
- react-native - WatermelonDB w ReactNative:如何在模型中正确使用@actions?
- sql - 将 oracle sql listagg 函数转换为 Bigquery
- python - 将 SQDIFF 与“滑动窗口视图”匹配的 NumPy 模板
- apache-spark - pySpark writerStream 未在 Jupyter Lab 中向控制台显示输出
- progressive-web-apps - 在运行相同 PWA 的两个离线设备之间同步数据
- python - 如何使用 Update_By_Query 在 Python Elastic Search 的多个文档中更新作为字段对象的字段?
- hardware-design - LT spice Simulation AD8220 显示一些奇怪的结果,我不知道为什么