Это сообщение было опубликовано в моем блоге здесь.

Вы когда-нибудь начинали новый проект, быстро понимая, что хотели бы повторно использовать код из другого проекта? Это произошло со мной во время разработки функциональных тестов для функций Google Cloud. Может быть, это может помочь и вам.

Проблема

Нечитаемый код может напоминать отвязывание проводов от берушей после того, как вытащили их из кармана. Взгляните, как тест мог искать облачную функцию (можете пропустить это, я просто пытаюсь показать, что это беспорядок с обратным вызовом):

Даже не начинайте о том, работает ли ваша функция асинхронно 🤢 (как это делает большинство). Обещание + обратный звонок, черт возьми, это будет для вас.

Решение

С некоторой магией абстракции этот тест стал намного проще:

Пусть yourFunction сходит с ума! Он может .send, .write, .end и многое другое!

Теперь вы идете!

Я создал из этого небольшой пакет npm; для вас (и меня) для повторного использования! Обработчики Google Cloud Function на самом деле являются просто обработчиками Express. Знаете ли вы, что это то же самое в функциях Firebase? Таким образом, локальное тестирование Firebase Functions тоже работает!

npm install pify-express-handler --save-dev

Позвольте мне знать ваши мысли! Я надеюсь, что это поможет вам :).

Альтернативы

Если вы используете Serverless Framework, возможно, вам лучше использовать их тестовую инфраструктуру. Но не используйте его только для тестирования, он очень тяжелый.

Другой вариант — использовать firebase-functions-test, если вы используете firebase. Но вам все равно нужно заглушить свой собственный объект res и выполнять require в необычных местах. Вы можете увидеть пример теста в действии в их репо.