为什么在 sinon js 中使用析构函数时存根函数不起作用?
why the stubbed functions does not works when using destructor with sinon js?
有很多人面临使用 sinon.js 的存根函数在使用 destructor
时不起作用的问题, 中提到了一个很好的解释。
正如答案中提到的,在使用析构函数时,我们总是调用原始函数:
const stub = (o, method) => (o[method] = () => "I am a stub");
const obj = {
methodFoo() {
return "I am foo";
}
};
// same as doing `const methodFoo = obj.methodFoo;`
const { methodFoo } = obj; // "import" using destructuring
console.log("obj.methodFoo(): ", obj.methodFoo());
console.log("methodFoo()", methodFoo());
console.log("Stubbing out method!");
stub(obj, "methodFoo");
console.log("obj.methodFoo: ", obj.methodFoo());
console.log("methodFoo()", methodFoo());
我搜索了为什么 destructor
覆盖 stub
的答案,或者它在幕后如何工作以了解如何操作数据,但我没有得到任何解决方案。有没有关于这个问题的任何细节?
存根覆盖方法 属性。如果你举这个人为的例子:
const obj = { prop: "value" };
const prop = obj.prop; // or { prop } = obj;
obj.prop = "new value"; // stub()
console.log(prop); // "value"
然后它可能会变得更清楚。将方法视为可以复制的值(实际上是复制对它们的引用)。
有很多人面临使用 sinon.js 的存根函数在使用 destructor
时不起作用的问题,
const stub = (o, method) => (o[method] = () => "I am a stub");
const obj = {
methodFoo() {
return "I am foo";
}
};
// same as doing `const methodFoo = obj.methodFoo;`
const { methodFoo } = obj; // "import" using destructuring
console.log("obj.methodFoo(): ", obj.methodFoo());
console.log("methodFoo()", methodFoo());
console.log("Stubbing out method!");
stub(obj, "methodFoo");
console.log("obj.methodFoo: ", obj.methodFoo());
console.log("methodFoo()", methodFoo());
我搜索了为什么 destructor
覆盖 stub
的答案,或者它在幕后如何工作以了解如何操作数据,但我没有得到任何解决方案。有没有关于这个问题的任何细节?
存根覆盖方法 属性。如果你举这个人为的例子:
const obj = { prop: "value" };
const prop = obj.prop; // or { prop } = obj;
obj.prop = "new value"; // stub()
console.log(prop); // "value"
然后它可能会变得更清楚。将方法视为可以复制的值(实际上是复制对它们的引用)。