首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jest.mock与jest.doMock的区别

jest.mock与jest.doMock的区别
EN

Stack Overflow用户
提问于 2020-10-07 21:26:53
回答 1查看 8K关注 0票数 13

我希望这是特定于一个测试的:

代码语言:javascript
复制
  it('should mock the module a single time', () => {
    jest.doMock('../../../../../../../components/HighCharts/HighCharts', () => {
      return () => <div id="mock-line-chart" />;
    });
  })

但是它不起作用。这适用于整个文件:

代码语言:javascript
复制
jest.mock('../../../../../../../components/HighCharts/HighCharts', () => {
  return () => <div id="my-special-div" />;
});

我是不是用错了?doMock和mock之间的区别在哪里?是否适合只为一次测试做一个模块模拟?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-07 23:23:18

当在顶层使用时,jest.mock被提升到import之上,当在块中使用时,它被提升到块的开头(测试功能范围等),jest.unmock也是如此。jest.doMockjest.dontMock的作用相同,但没有被提升。

这对于像这样的情况很重要:

代码语言:javascript
复制
  it('should mock the module a single time', () => {
    let originalHighCharts = require('.../HighCharts');
    ...
    jest.doMock('.../HighCharts', ...);
    let mockedHighCharts = require('.../HighCharts');
    ...
  })

doMock允许特定顺序在实践中很少有用,因为可以使用jest.requireActual检索模拟模块,而相同的序列可能不会因为缓存而影响依赖于模拟模块的其他模块。

doMockdontMock没有被提升,这允许在特定的场景中一起使用它们来模拟单个测试的模块:

代码语言:javascript
复制
let HighCharts;
jest.isolateModules(() => {
  jest.doMock('.../HighCharts', ...);;
  HighCharts = require('.../HighCharts');
  jest.dontMock('.../HighCharts');
});

缺点是,如果导入失败,dontMock可能无法执行,因此可能会影响其他测试,这需要额外处理。强制执行默认模块状态可能更直接,这对于大多数测试是可取的:

代码语言:javascript
复制
beforeEach(() => {
  jest.unmock('.../HighCharts');
  jest.resetModules();
});
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64245013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档