开玩笑的模拟范围是什么?

时间:2020-01-30 21:08:21

标签: javascript reactjs unit-testing jestjs

总而言之,我想知道:

  1. 是否包含模拟文件来测试文件或影响多个文件?
  2. 玩笑的范围与JavaScript的范围相同吗?位于最内部范围的模拟优先于具有相同名称的外部/全局模拟。
  3. 一个后续问题可能是:哪些笑话模拟方法适用于单位,哪些适用于本地和全局范围?

例如,在以下文件系统中:

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.js 中的jest.mock('../internalModule, () => customImplementation)是否会影响 fileB.spec.js ,反之亦然?
  2. 类似地, fileA.spec.js 中的jest.mock('externalModule', () => customImplementation)是否会影响 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')用于全局模拟,是否为每个文件重置它?

我看到了非常不一致的行为,也没有文档明确解释这一点。此外,我发现文档到处都是,或者不够具体。

谢谢。

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

0 个答案:

没有答案