很多人面临使用sinon.js进行函数存根的问题,在使用destructor时不起作用,并且在Sinon stub function used with destructuring上提到了很多错误。
就像答案中提到的那样,当使用析构函数时,我们总是调用原始函数:

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或它如何在后台运行,以了解如何处理数据,但我没有任何解决方案。关于这个问题有什么细节吗?

最佳答案

存根将覆盖methods属性。如果您使用这个人为的示例:

 const obj = { prop: "value" };

 const prop = obj.prop; // or { prop } = obj;

 obj.prop = "new value"; // stub()

 console.log(prop); // "value"


那么它可能会变得更加清晰。将方法视为可以复制的值(实际上是复制了对它们的引用)。

09-25 22:25