javascript - 在另一个函数中调用 Jest 模拟函数时不起作用
问题描述
我认为我对 Javascript 的理解存在根本性错误。
在文件 abc.js 中,我有代码
export function returnBoolean() {
return true;
}
export function output() {
return returnBoolean();
}
在测试中,我做
import * as abc from "../abc";
it("test", () => {
abc.returnBoolean = jest.fn();
abc.returnBoolean.mockReturnValue(false);
expect(abc.returnBoolean()).toBe(false); // This is success
expect(abc.output()).toBe(false); // This failed because return is true
});
我不知道为什么
abc.output()
return 是true
。
我真的很困惑。任何想法都非常感谢。谢谢!
解决方案
output()
并且returnBoolean()
都在同一个文件中并直接output()
调用returnBoolean()
。
模拟模块导出对returnBoolean()
没有任何影响,output()
因为它没有使用模块,而是returnBoolean()
直接调用。
就像 felixmosh 所说,移动returnBoolean()
到不同的模块是能够模拟对returnBoolean()
within的调用的一种方法output()
。
另一种方法是简单地将模块导入自身并使用模块在returnBoolean()
内部调用,output()
如下所示:
// import the module back into itself
import * as abc from './abc';
export function returnBoolean() {
return true;
}
export function output() {
return abc.returnBoolean(); // use the module to call returnBoolean()
}
使用这种方法,您的单元测试应该可以工作。
推荐阅读
- azure - 使用 Asyncio(异步)接收消息并获取变量作为最终结果
- python - 为什么带有 Python 扩展的 Visual Studio Code 不能正确导入“分数”库?
- azure - 如何停止从 Azure Functions 中的特定函数发送遥测数据?
- android - 我们可以使用 Android CameraX 进行图像处理吗?
- r - 使用不断变化的索引填充数据帧的行/在循环中更新索引
- microsoft-graph-api - 无法使用 Postman 从图表中检索列表项
- django - Django - forms.ChoiceField 不使用模型
- android - Android 模式匹配器未能检测到特殊字符
- fuchsia - 无法在模拟器上启动 Fuchsia
- c++ - 如何在 C++ 中创建带有证明的 TPM 虚拟智能卡