首页 > 解决方案 > 开玩笑的模拟范围是什么?

问题描述

总之,我想知道:

  1. 是否包含模拟以测试文件或影响多个文件?
  2. jest 作用域与 JavaScript 作用域相同吗?最内部范围内的模拟优先于具有相同名称的外部/全局模拟。
  3. 一个后续问题可能是:哪些 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

我有以下问题:

  1. fileA.spec.jsjest.mock('../internalModule, () => customImplementation)会影响fileB.spec.js 反之亦然?
  2. 同样,jest.mock('externalModule', () => customImplementation)fileA.spec.js中是否会影响fileB.spec.js,反之亦然?做`jest.mock('模拟外部模块(node_modules)
  3. 全局模拟如何工作?它们会跨文件自动加载还是我必须明确地jest.mock('externalModule')进行初始化
  4. jest.mock('externalModule', () => customImplementation)优先于全局模拟吗?它会覆盖跨文件的全局模拟吗?
  5. jest.spyOn(internalModule, 'someFunc').mockImplementationOnce(..)在单元的生命周期内模拟实现,还是只调用一次就someFunc()可以重置功能?
  6. 根据文档jest.doMock,相反jest.mock,不会将模拟“提升”。但是,在哪里?文件?它会在单元结束时自动取消模拟或重置它吗?还是会影响未来的单位?
  7. 对于全局模拟,是否会jest.unmock('externalModule')为每个文件重置它?

我看到了非常不一致的行为,并且没有明确解释这一点的文档。此外,我发现文档要么无处不在,要么不够具体。

提前致谢。

PS我发现了其他类似标题的问题,例如How to limit the scope of Jest mocked functions to a single testScoping in Jest when mocking functions,但他们没有回答我的问题。

标签: javascriptreactjsunit-testingjestjs

解决方案


推荐阅读