Как заглушить обещанный зависимый модуль, который экспортирует функцию

Вы пытаетесь использовать sinon для заглушки зависимого модуля, но обнаружили, что они неудобно экспортировали функцию, а не объект?

Кроме того, вы оборачиваете этот зависимый модуль через bluebird promisify?

Если это так, я собираюсь избавить вас от головной боли в Интернете и показать вам, как это сделать здесь.

Допустим, у вас есть следующий зависимый модуль user-data:

И давайте сделаем это более интересным, вы используете это в каком-то промежуточном программном обеспечении под названием accounts.js:

Чтобы проверить это с помощью sinon, вы хотите заглушить fetchUsers, однако sinon заглушка работает с объектами, fetchUsers оказывается экспортируемой функцией, а не объектом.

Обходной путь — использовать proxyquire, чтобы мы могли «заглушить» экспортированную функцию. Написание этого теста будет выглядеть так: