Когда вы вызываете 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);