jest.spyOn не работает с деструктурированными функциями - PullRequest
0 голосов
/ 08 ноября 2019

Почему jest.spyOn не работает с деструктурированными функциями, которые деструктурированы на месте теста?

следующий тест не пройден:

export const Funcs = {
  foo: () => {
    return 'foo';
  }
};

const { foo } = Funcs;

test('should pass', () => {
  const spy = jest.spyOn(Funcs, 'foo');
  foo();
  expect(spy).toHaveBeenCalled();
});

однако он будет работать, если мы переместимсяДеструктурация внутри теста:

test('should pass', () => {
  const spy = jest.spyOn(Funcs, 'foo');
  const { foo } = Funcs;
  foo();
  expect(spy).toHaveBeenCalled();
});

1 Ответ

1 голос
/ 08 ноября 2019

Когда вы вызываете 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...