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

1Ma*_*yur 2 reactjs jestjs enzyme

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

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

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

sky*_*yer 5

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);
});
Run Code Online (Sandbox Code Playgroud)

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

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

所以这就是为什么 allconstlet甚至在模块被模拟时都没有定义。