具有不同返回值的Jest jest.mock函数

时间:2018-10-08 22:12:07

标签: reactjs jestjs enzyme

测试带有笑话和酶的反应和打字稿,我该如何模拟ExpectsVideo函数,以便我可以根据我的测试用例Scenerio定义它是否返回true或false

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

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

1 个答案:

答案 0 :(得分:3)

mockImplementationmocking whole module期间应该有所帮助:

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);
});

关于从外部返回错误并返回错误的BTW(来自jest.doMock documentation的部分):

  

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

所以这就是为什么在模拟模块时都没有定义所有constlet的原因。