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
    

Очевидно не е добра практика да се използва 'sleep' в тестове, но понякога това е единственото решение.

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