【问题标题】:jest.mock() doesn't work inside tests, only outside testsjest.mock() 在测试内部不起作用,只能在外部测试
【发布时间】:2022-01-03 13:42:43
【问题描述】:

我有一套简单的测试,在某些情况下我想模拟一个模块,而在某些情况下不是。但是,jest.mock() 仅在将其置于测试之外时才有效。任何人都知道为什么会这样以及我做错了什么?

这是我要模拟的函数的实际导入

import {hasSupport, getCallingCode} from 'utils/countryCallingCode';

这是这个函数的模拟:

jest.mock('utils/countryCallingCode', () => ({
    getCallingCode: () => '1',
    hasSupport: () => true,
  }));

现在,工作场景是:

//imports
//mock

describe('...', () -> {
    it('...', () -> {

    });
});

这不起作用:

//imports

describe('...', () -> {
    //mock

    it('...', () -> {

    });
});

这也不起作用:

//imports

describe('...', () -> {
    it('...', () -> {
        //mock
    });
});

【问题讨论】:

  • 另一种选择是尝试在不同的测试套件中使用jest.spyOn

标签: reactjs jestjs


【解决方案1】:

Jest 在任何导入语句之前自动将 ES 模块中的 jest.mock 调用提升到文件顶部。这样做是为了允许树中的其他模块使用模拟模块。

Jest documentation 还提供了一个示例存储库来解释how Jest mocking works

如果你想阻止这种自动行为,你可以使用jest.dontMock

【讨论】:

  • 不适合我,我试过了...
  • 如果文档没有按照它应该为您做的事情,您可能需要设置一个可重现的沙箱示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 2019-11-24
  • 1970-01-01
相关资源
最近更新 更多