У меня есть проект с использованием firebase. В functions/index.js
у меня есть следующий код вверху с импортом. Это инициализирует экземпляр Stripe API с ключом производственного API в моей конфигурации firebase.
const stripeProd = require('stripe')(functions.config().stripe.secret)
В своих тестовых файлах я использую Sinon для заглушки и насмешек.
В самом низу functions/index.js
я экспортирую свое экспресс-приложение и экземпляр Stripe API, показанный выше:
exports.app = functions.runWith(runtimeOptions).https.onRequest(app)
// export these so they can be stubbed in UTs
exports.stripeProd = stripeProd
//.... other exports
Этот экспорт позволил мне успешно заглушить полосу, чтобы мои UT не выполняли вызовы API.
Однако, когда я пытаюсь запустить это с помощью firebase serve
, я получаю следующую ошибку:
❮❮❮ firebase serve
// ... stuff
i hosting: Serving hosting files from: public
✔ hosting: Local server: http://localhost:5000
⚠ functions: Maximum call stack size exceeded
⚠ Your function was killed because it raised an unhandled error.
Я обнаружил, что если я закомментирую строку, экспортирующую API полосы, эта ошибка исчезнет. Почему это происходит?
инструмент firebase не предоставляет стек вызовов
попробуй это:
const Stripe = require('stripe');
const stripeProd = new Stripe(functions.config().stripe.key, {
apiVersion: '2020-08-27' //this value should be whatever api version you are using
});
//...
exports.stripeProd = stripeProd
Я надеюсь, что это поможет, я также рекомендую импортировать ваши функции полосы из других файлов, чтобы работать более организованно.
да, перемещение экземпляра Stripe API в его собственный файл решило эту проблему, как вы рекомендуете
не могли бы вы объяснить, почему использование такого конструктора должно решить проблему?
В документации по полосам есть несколько примеров, но я прочитал этот репозиторий github.com/fireship-io/stripe-payments-js-course/blob/master/…, в основном вам нужно создать экземпляр класса Stripe и экспортируйте этот экземпляр в свой проект, чтобы вы могли использовать все методы, которые есть в классе Stripe, счастливых праздников, Пейман 😄
Как выглядит фактический стек исключений и вызовов?