Stripe JS не работает при тестировании с Cucumber

Я использую Stripe JS на странице оформления заказа на сайте электронной коммерции. При тестировании вручную в браузере поток работает нормально. Но при автоматизации тестирования с помощью Cucumber я получаю следующую ошибку при отправке формы:

Произошла непредвиденная ошибка при отправке вашей кредитной карты в наш безопасный процессор кредитных карт. Это может быть связано с проблемами подключения к сети, поэтому попробуйте еще раз (с вас не будет взиматься плата дважды). Если эта проблема не исчезнет, ​​сообщите нам об этом!

Есть ли причина, по которой Stripe JS не будет работать в тестовой среде, но отлично подойдет для разработки и производства?


person Aaron Marks    schedule 13.03.2014    source источник
comment
Если вы войдете в Stripe и перейдете в журналы, сможете ли вы увидеть информацию о запросе?   -  person CWitty    schedule 18.03.2014
comment
Журналы @CWitty Stripe ничего не показывают для предполагаемого запроса.   -  person Aaron Marks    schedule 18.03.2014


Ответы (2)


Я не эксперт Stripe JS, но когда у меня возникают проблемы с Cucumber + JS, в большинстве случаев есть два варианта:

  1. Мне нужно добавить тег @javascript перед функцией/сценарием (очевидная проблема)

  2. Перед шагами с функциональностью js требуется некоторая задержка:

    When /^wait (\d) sec$/ do |delay|
      sleep delay.to_i
    end
    

Очевидно, что использовать «сон» в тестах не рекомендуется, но иногда это единственный обходной путь.

person Piotr Brudny    schedule 18.03.2014
comment
Хотя я не могу объяснить почему, добавление 5-секундного ожидания действительно сработало! - person Aaron Marks; 18.03.2014

Это связано с тем, что если вы используете метод Stripe (https://stripe.com/docs/tutorials/forms), Stripe асинхронно проверяет информацию, введенную пользователем. Поскольку это делается асинхронно, огурец об этом не знает. Что вам действительно нужно, так это заставить Cucumber ждать на шаге, следующем за отправкой формы Strip, до тех пор, пока определенное условие не будет выполнено с чем-то вроде этого.

Then(/^they should see "(.*?)"$/) do |content|
  wait_until do
   page.should have_content(content)
  end 
end

Однако функция wait_until была удалена из Capybara v2. Поэтому вам нужно будет реализовать его самостоятельно, если вы хотите его использовать (через https://gist.github.com/jnicklas/d8da686061f0a59ffdf7)

Вот полный пост в блоге по теме

http://www.elabs.se/blog/53-why-wait_until-was-removed-from-capybara

person katzmopolitan    schedule 11.08.2014