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!

questionAnswers(5)

yourAnswerToTheQuestion