Como escrever testes de integração para o Stripe checkout no Rails?
Eu bati no muro tentando escrever um teste de integração para o checkout.js do Stripe [https://checkout.stripe.com/checkout.js ] para o meu aplicativo Rails 3.2.
O checkout do Stripe funciona corretamente para mim quando testado manualmente (usando as chaves de teste do Stripe), mas não consigo fazer com que o Capybara detecte efill_in
o campo de e-mail no check-out Stripe iframe modal.
estou usandopoltergeist para javascript decapitado, mas também testou isso comcapybara-webkit e até mesmoselênio com o mesmo problema.
O que estou tentando testar é o fluxo completo de inscrição, para mostrar que um novo usuário pode criar uma conta de assinante após inserir os detalhes de pagamento no Stripe - mas não consigo passar pelo pop-up de check-out do Stripe.
Aqui está o meubefore .. do
:
describe "show Stripe checkout", :js => true do
before do
visit pricing_path
click_button 'plan-illuminated'
stripe_iframe = all('iframe[name=stripe_checkout_app]').last
Capybara.within_frame stripe_iframe do
fill_in "email", :with => "[email protected]"
fill_in "billing-name", :with => "Mr Name"
fill_in "billing-street", :with => "test Street"
fill_in "billing-zip", :with => 10000
fill_in "billing-city", :with => "Berlin"
click_button "Payment Info"
end
end
it { should have_selector('button', text: "Subscribe") }
end
Quais erros com:
Failure/Error: Capybara.within_frame stripe_iframe do
Capybara::Poltergeist::TimeoutError:
Timed out waiting for response to {"name":"push_frame","args":[null]}
Se eu trocar a tentativa de escolher o iframe correto (sugerido aqui:Problemas na capivara preenchendo JS modal ) igual a:
# stripe_iframe = all('iframe[name=stripe_checkout_app]').last
# Capybara.within_frame stripe_iframe do
Capybara.within_frame 'stripe_checkout_app' do
Eu ainda recebo o semelhante:
Capybara::Poltergeist::TimeoutError:
Timed out waiting for response to {"name":"push_frame","args":["stripe_checkout_app"]}
Parece que, independentemente da gema de teste de javascript que eu uso, o rspec / capybara não consegue encontrar o iframe do checkout do Stripe. Quando verifico o Selenium, vejo oChoose this Plan
botão pressionado e o Checkout pop-up, mas as especificações atingem o tempo limite, procurando o campo de email a ser preenchido.
Alguma ideia?
Eu já tentei:
Várias maneiras de escolher ou encontrar o campo de email.Atualizando todas as minhas jóias.Usando o StripeMock antes disso (não que ele deva estar envolvido, certo?).Executando os mesmos testes no site do Stripe, que fornece os mesmos erros:Testando com:
visit "https://stripe.com/docs/checkout"
click_button 'Pay with Card'
stripe_iframe = all('iframe[name=stripe_checkout_app]').last
Capybara.within_frame stripe_iframe do
fill_in 'Email', with: '[email protected]'
sleep 3
end
Dependendo do método usado para selecionar o iframe, recebo os mesmos erros. Usando apenasCapybara.within_frame 'stripe_checkout_app' do
:
Failure/Error: Capybara.within_frame stripe_iframe do
Capybara::Poltergeist::TimeoutError:
Timed out waiting for response to {"name":"push_frame","args":[null]}
ou usando Selenium comstripe_iframe = all('iframe[name=stripe_checkout_app]').last
:
Failure/Error: Unable to find matching line from backtrace
SystemStackError:
stack level too deep
ou mesmo apenas:
Failure/Error: fill_in 'Email', with: '[email protected]'
Capybara::ElementNotFound:
cannot fill in, no text field, text area or password field with id, name, or label 'Email' found
... dependendo de qual javascript de teste estiver usando.
Qualquer ajuda ou sabedoria é muito apreciada!