首页 > 解决方案 > 具有不同返回值的 Jest jest.mock 函数

问题描述

用 jest 和酵素测试反应和打字稿,我将如何模拟这个 expectsVideo 函数,以便我可以根据我的测试用例场景定义它是否返回 true 或 false

jest.mock('utils/media-utils', () => ({
  expectsVideo: () => true,
  myOtherFunctions: jest.fn()
}));

utils/media-utils 如果在我正在测试的反应组件中导入文件。如果我尝试从外部引用对象,它会给我错误说明不能使用超出范围的变量。尝试了各种实现,我遇到了不同的博客,但没有帮助。

标签: reactjsjestjsenzyme

解决方案


mockImplementation在模拟整个模块时应该有所帮助:

import * as mediaUtils from 'utils/media-utils';

mock('utils/media-utils'); // automocking whole module

it('....1...', () => {
    mediaUtils.expectsVideo.mockImplementation(() => true);
});

it('....2...', () => {
    mediaUtils.expectsVideo.mockImplementation(() => false);
});

顺便说一句,关于从外部引用返回错误的变量(来自jest.doMock文档部分):

使用 babel-jest 时,对 mock 的调用将自动提升到代码块的顶部。如果您想明确避免此行为,请使用此方法。

所以这就是为什么 all constandlet甚至在模块被模拟时都没有定义的原因。


推荐阅读