Я пытаюсь выполнить модульное тестирование вызова API, чтобы убедиться, что он был вызван с правильными свойствами. Этот вызов API зависит от внешней библиотеки Stripe, которая присоединяется к окну через index.html
src="http://stripe[...]"
. Я получаю окно. [...] это не функция.
Я успешно издевался над запросом $http.post
, но при успешном обратном вызове от платежа Stripes он перенаправляет пользователя обратно, вызывая window.Stripe()
.redirectToCheckout (). Мне удалось высмеять window.Stripe
, но у меня возникли трудности с .redirectToCheckout()
, и я не был уверен в правильности пути.
index.html:
<script src="https://js.stripe.com/v3/"></script>
<link rel="preconnect" href="https://q.stripe.com">
<link rel="preconnect" href="https://checkout.stripe.com">
StripePayment.vue
async stripe () {
await this.$http.post(process.env.VUE_APP_PAYMENTAPI + 'api/session/', {
amount: this.cost,
}).then(response => {
// Redirect to the main page by using the sessionId provided by stripes response.
window.Stripe(process.env.VUE_APP_STRIPE_KEY).redirectToCheckout({
sessionId: response.body
})
}, response => {
this.paymentFailed(response)
})
}
StripePayment.spec.js
let stripeSpy = sinon.spy(StripePayment.methods, 'stripe')
sinon.assert.calledOnce(stripeSpy)
Я ожидаю, что смогу проверить, что вызов API был успешно вызван. К сожалению, я получаю следующее сообщение об ошибке - «UnhandledPromiseRejectionWarning: TypeError: window. Stripe не является функцией». Если я заглушу окно. Stripe, тогда я получаю похожую ошибку с .redirectToCheckout (), и именно в этот момент я попытался заглушить.
Был опубликован некоторый код, похожий на мой, который можно найти здесь - https://repl.it/@AndrewReinlieb/Checkout-Test.