我只想模拟模块中的单个函数(名为 export),但保留其余模块函数不变。
使用 jest.mock('package-name')
使所有导出的函数模拟,这是我不想要的。
我尝试将命名的导出传播回模拟对象中……
import * as utils from './utilities.js';
jest.mock(utils, () => ({
...utils
speak: jest.fn(),
}));
但出现此错误:
jest.mock()
的模块工厂不允许引用任何超出范围的变量。原文由 spencer.sm 发布,翻译遵循 CC BY-SA 4.0 许可协议
这个答案的亮点是 jest.requireActual() ,这是一个非常有用的实用程序,它开玩笑说“嘿,保持所有原始功能完好无损并导入它们”。
让我们来看另一种常见情况,您正在使用酶 ShallowWrapper 并且它与 useContext() 挂钩不兼容,那么您打算怎么办?虽然我确定有多种方法,但这是我喜欢的一种:
这样做的好处是您仍然可以在原始代码中使用
import React, { useContext } from "react"
而不必担心将它们转换为 React.useContext() 就像您使用 jest.spyOn(React, ‘使用上下文’)