Почему Jest все еще требует смоделированного модуля? - PullRequest
1 голос
/ 11 апреля 2019

Я издеваюсь над модулем, используя Jest, потому что он содержит код, который не должен запускаться в тесте.Однако я могу видеть из вывода, что код в модуле выполняется.

// foo.js
console.log('Hello')

// test.js
jest.mock('./foo')
const foo = require('./foo')

test.todo('write some tests')

Вывод на консоль

PASS  test.js
  ✎ todo 1 test

console.log foo.js:1
Hello

Что с этим?

1 Ответ

0 голосов
/ 11 апреля 2019

Это сбило меня с толку пару раз.

Если вы не предоставите фиктивную реализацию для jest.mock, она вернет объект, который отражает экспорт моделируемого модуля, но каждая функция будет заменена на макет jest.fn(). Это довольно аккуратно, так как часто это то, что вы хотите. Но чтобы определить экспорт модуля, он должен сначала require его. Это то, что вызывает запуск console.log.

Два возможных решения:

  • Не запускайте код на верхнем уровне модуля: вместо этого экспортируйте функцию, которая выполняет код.
  • Предоставьте свою собственную макетную реализацию, чтобы не нужно было анализировать модуль jest.mock('./foo', () => {})
...