调用jest.spyOn(Funcs,'foo');
时,Funcs对象将被修改为具有新的foo
属性。您的第一个代码示例是在模拟它之前访问Funcs.foo的过程,因此const foo
指的是实函数。第二个代码示例是在进行模拟后访问Funcs.foo,因此您要指向模拟函数。
如果您不使用开玩笑和进行破坏操作,那么这是您正在做的事情的例证。修改前访问:
const example = {
value: 1
}
const val = example.value;
example.value = 2;
console.log(val);
在访问之前进行修改:
const example = {
value: 1
}
example.value = 2;
const val = example.value;
console.log(val);
,
我遇到了类似的问题 - 我正在为我的 Express.js 控制器编写测试,这些控制器使用了一些辅助函数,这些函数都是使用解构和 index.js
文件导入的。在尝试编写这些测试时,我无法拦截原始函数来模拟它们。我最初决定为这些辅助函数使用默认导入,这样我就可以轻松地jest.spyOn
使用它们,但从视觉上看,我更喜欢解构导入。
然而,我今天在玩它,在导入我的控制器文件之前,我通过设置我的所有 spies 让它与解构一起工作。通过这种方式,我在将原始函数导入控制器文件之前成功拦截并模拟了它。所以这是有效的:
const utilities = require("../utilities");
const axiosInstanceSpy = jest.spyOn(utilities,"pchAxiosInstance");
const createPCHObjectSpy = jest.spyOn(utilities,"createPCHObject");
const pchController = require("./pchController");
但这不会:
const utilities = require("../utilities");
const pchController = require("./pchController");
const axiosInstanceSpy = jest.spyOn(utilities,"createPCHObject");
本文链接:https://www.f2er.com/3137260.html