Как выполнить модульное тестирование API, который зависит от внешней библиотеки "<script src =" http://stripe[. ..] " - PullRequest
1 голос
/ 12 июня 2019

Я пытаюсь выполнить модульное тестирование вызова 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.

1 Ответ

2 голосов
/ 12 июня 2019

Для надлежащего тестирования изолированного устройства все устройства, которые не относятся к проверенному устройству, должны быть проверены.Если блок принадлежит внешней библиотеке, он должен быть смоделирован на window:

const stripeMock = sinon.stub(window, 'stripe');
const redirectToCheckoutMock = sinon.stub();
stripeMock.returns({ redirectToCheckout: redirectToCheckoutMock });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...