如何用jest进行单元测试时替换全局函数

Rea*_*ner 5 unit-testing reactjs jestjs

我正在为模块编写单元测试.我真的需要帮助来处理全球变量和功能.我的问题如下:假设我想测试名为'needTest.js'的模块.结构如下:

在此输入图像描述

因为我只需要在我的测试文件中测试needTest.js中的main函数,我首先import main from '../needTest.js'.而我的问题是:函数main不仅需要三个输入p1,p2和p3,它还取决于一些全局变量或函数,如isA,isB,isC.如何在我的测试文件中模拟这些全局变量?我想简单地替换那些全局变量的返回值,让我的测试文件忽略它导入的内容,但只使用我嘲笑的东西.

小智 0

实现此目的的一种方法是使用 Jest 的jest.mock方法

jest.mock('module-isA-came-from');
jest.mock('module-isB-came-from');
jest.mock('module-isC-came-from');
Run Code Online (Sandbox Code Playgroud)

然后,您可以显式传递模块工厂:

jest.mock('module-isA-came-from', () => jest.fn(() => 42));
Run Code Online (Sandbox Code Playgroud)

或者设置自动模拟模块的期望:

isA.mockReturnValue(42);
Run Code Online (Sandbox Code Playgroud)