¿Cómo escribir pruebas de integración para el pago de Stripe en Rails?

Llegué al muro intentando escribir una prueba de integración para el checkout.js de Stripe [https://checkout.stripe.com/checkout.js ] para mi aplicación Rails 3.2.

La verificación de Stripe funciona correctamente para mí cuando se prueba manualmente (usando las teclas de prueba de Stripe), pero no puedo hacer que Capybara detecte yfill_in el campo de correo electrónico en el modal iframe de pago de Stripe.

estoy usandoduende para JavaScript sin cabeza, aunque también he probado esto concarpincho-webkit e inclusoselenio con el mismo problema

Lo que estoy tratando de probar es el flujo completo de suscripción de suscripción, para mostrar que un nuevo usuario puede crear una cuenta de suscriptor después de ingresar sus detalles de pago en Stripe, pero no puedo pasar la ventana emergente de pago de Stripe.

Aquí está mibefore .. 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

Qué errores con:

Failure/Error: Capybara.within_frame stripe_iframe do
 Capybara::Poltergeist::TimeoutError:
   Timed out waiting for response to {"name":"push_frame","args":[null]}

Si cambio el intento de elegir el iframe correcto (sugerido aquí:Problemas de carpincho para completar el modal JS ) al igual que:

# stripe_iframe = all('iframe[name=stripe_checkout_app]').last
# Capybara.within_frame stripe_iframe do  
Capybara.within_frame 'stripe_checkout_app' do

Todavía me sale lo mismo:

Capybara::Poltergeist::TimeoutError:
   Timed out waiting for response to {"name":"push_frame","args":["stripe_checkout_app"]}

Parece que cualquier gema de prueba de JavaScript que use, rspec / capybara no puede encontrar el iframe de pago de Stripe. Cuando verifico con Selenium veo elChoose this Plan botón presionado y la ventana emergente Finalizar compra, pero la especificación agota el tiempo buscando el campo de correo electrónico para completar.

¿Algunas ideas?

Ya he intentado:

Varias formas de elegir o encontrar el campo de correo electrónico.Actualizando todas mis gemas.Usar StripeMock antes de esto (no es que deba estar involucrado, ¿verdad?).Ejecutando las mismas pruebas contra el propio sitio de Stripe, que dan los mismos errores:

Prueba con:

  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

Dependiendo del método que use para seleccionar el iframe, recibo los mismos errores. Usando soloCapybara.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]}

o usando selenio constripe_iframe = all('iframe[name=stripe_checkout_app]').last:

 Failure/Error: Unable to find matching line from backtrace
 SystemStackError:
   stack level too deep

o incluso solo:

 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

... dependiendo de la prueba de gema de JavaScript que estoy usando.

Cualquier ayuda o sabiduría es muy apreciada!

Respuestas a la pregunta(5)

Su respuesta a la pregunta