what rails docs and ruby-on-rails selenium google-maps-api-3 rspec capybara

ruby-on-rails - rails - rspec and capybara



Las pruebas de Capybara fallan con Timeout:: Error en la primera prueba cuando se usa Google Maps (2)

¿Has intentado cambiar GemFile para tener un grupo: producción do?

¿Y estás cargando todo este script en el lugar correcto?

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false">

Este ejemplo es para bootstrap:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&key=YOUR_API_KEY&sensor=SET_TO_TRUE_OR_FALSE" type="text/javascript"> </script>

Estoy probando con RSpec + Capybara + Selenium (Firefox). No importa qué subconjunto de mis pruebas de aceptación corro, el primero falla (las próximas pruebas funcionan correctamente) con "razón" como esta:

Failure/Error: visit ''/'' Timeout::Error: Timeout::Error

Mi aplicación depende en gran medida de GoogleMaps y BackboneJS. Cuando realizo pruebas, la página no termina de cargarse y el mensaje "transferencia de datos de maps.googleapis.com" permanece en la esquina inferior izquierda de la ventana de Firefox; sin embargo, la página parece cargada correctamente (los mapas y otros contenidos están presentes). Ya he configurado el tiempo de espera en 60 segundos para excluir cualquier problema de red lento. Y todas las pruebas subsiguientes funcionan muy rápido (como las secuencias de comandos de Google correctas y ya almacenadas en la memoria caché). Además, cuando inicio el servidor en el entorno de desarrollo y accedo a él ( localhost:3000 ) todo funciona bien.

Firefox 17.0.1. Algunas de mis gemas:

capybara (2.0.1) database_cleaner (0.9.1) mongoid (3.0.13) rspec (2.12.0) rspec-core (2.12.1) rspec-expectations (2.12.0) rspec-mocks (2.12.0) rspec-rails (2.12.0) selenium-webdriver (2.26.0)

¿Tiene alguna idea de por qué sucede esto y cómo prevenirlo?

EDITAR:

spec/spec_helper.rb :

# This file is copied to spec/ when you run ''rails generate rspec:install'' ENV["RAILS_ENV"] ||= ''test'' require File.expand_path("../../config/environment", __FILE__) require ''rspec/rails'' require ''rspec/autorun'' # Requires supporting ruby files with custom matchers and macros, etc, # in spec/support/ and its subdirectories. Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} RSpec.configure do |config| config.include FactoryGirl::Syntax::Methods config.treat_symbols_as_metadata_keys_with_true_values = true config.infer_base_class_for_anonymous_controllers = false #config.order = "random" end

spec/features/features_spec_helper.rb :

require_relative "../spec_helper" require ''capybara/rspec'' Capybara.default_driver = :selenium Capybara.default_wait_time = 60

EDIT2:

Solía ​​funcionar correctamente antes (hace unas semanas, este proyecto se detuvo durante ese tiempo). Podría ser introducido por la actualización de RSpec de 2.11 a 2.12 (que hice hace algunas semanas), pero he intentado degradarlo y ocurren las mismas cosas. Revertí toda la base de código al punto hace un mes para excluir una posible regresión de gemas. El problema aún sucede.

EDIT3:

Acabo de descubrir que si comento la línea responsable de adjuntar el mapa de Google:

new google.maps.Map($("#map")[0], mapOptions)

entonces todo funciona como un encanto.

EDIT4:

Código fuente de la aplicación de ejemplo: https://github.com/skalee/capybara-google-maps-failure

La ejecución de todas las especificaciones dará como resultado Timeout :: Error en la primera (al menos para mí). Sin embargo, todas las especificaciones pasarán cuando:

  1. Quita la línea que inicializa Geocoder (no se usa en la aplicación de ejemplo, pero la uso en la mía).
  2. Elimina la línea que inicializa el Mapa .
  3. Lo que más me sorprendió cuando proporcionó una hoja de estilo trivial, como nada más que eso:

#map{ width: 600px ; height: 600px }

Las gemas son exactamente las mismas gemas que uso en mi aplicación. Hay algunos scripts de terceros en /vendor/assets .