почему заглушки не работает при использовании деструктора с sinon js? - PullRequest
0 голосов
/ 13 июня 2019

Многие люди сталкиваются с проблемой заглушки с помощью sinon.js, которая не работает при использовании destructor, и есть большое объяснение, упомянутое в Функция заглушки Sinon, используемая при деструктурировании . И как уже упоминалось в ответе, при использовании деструктора мы всегда вызываем оригинальную функцию:

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 или как он работает под капотом, чтобы понять, как манипулировать данными, но я не нашел никакого решения. Есть ли какие-либо подробности по этому вопросу?

1 Ответ

2 голосов
/ 13 июня 2019

Stubbing переопределяет свойство методов. Если вы возьмете этот надуманный пример:

 const obj = { prop: "value" };

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

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

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

тогда это может стать яснее. Думайте о методах как о значениях, которые можно скопировать (фактически ссылка на них копируется).

...