what rails docs ruby-on-rails selenium rspec capybara poltergeist

ruby-on-rails - docs - rails 5 rspec



Rspec+Capybara cambian opcionalmente el controlador JS (4)

Yo uso poltergeist / phantomjs para CI, pero quiero poder cambiar opcionalmente el controlador JS a selenio para ver mi prueba se ejecuta localmente. Idealmente, me gustaría tener un indicador de línea de comando para esto, por defecto, poltergeist, pero poder ejecutar rspec --driver = selenio (o algo similar)

¿Algunas ideas?


Nunca terminé encontrando una respuesta para esto, así que aquí está la solución hacky que se me ocurrió:

Lo único que encontré que pude cambiar de manera confiable fue el sistema de etiquetado. Entonces llamo usando -t tag visual y luego lo quito.

En spec / spec_helper.rb

Rspec.configure do |config| if config.filter_manager.inclusions[:visual] Capybara.javascript_driver = :selenium config.filter_manager.inclusions.delete(:visual) else Capybara.javascript_driver = :poltergeist end ~rest of rspec config code~

Ahora puede ejecutar sus pruebas con rspec (tests to run) -t visual
El principal problema con esto es que le impedirá ejecutar pruebas específicas. Aún puede hacer un solo archivo con rspec spec/features/signup_spec.rb -t visual pero no puede agregar un :54 para ejecutar en un número de línea específico.


Tengo lo que creo que podría ser una solución menos hacky. Básicamente estoy robando la solución de Jeff Perrin pero haciéndola menos complicada.

Mi DatabaseCleaner está configurado para usar siempre el truncamiento, por lo que no es necesario configurarlo de manera condicional.

Configure su javascript_driver esta manera:

# spec/spec_helper.rb Capybara.javascript_driver = ENV[''USE_SELENIUM_FOR_CAPYBARA''] ? :selenium : :webkit

No veo ninguna necesidad de configurar el controlador predeterminado de Capybara si siempre estamos estableciendo javascript_driver explícitamente en algo. (Es posible que Jeff sepa algo sobre esto que yo no)

Esto utilizará Webkit como el controlador a menos que tenga USE_SELENIUM_FOR_CAPYBARA establecido en su entorno.

También debería tener las gemas del controlador Selenium y Webkit en su Gemfile si desea que RSpec pueda funcionar con cualquiera de los controladores.


Esta solución ha funcionado perfectamente para mí. Configuro una variable de entorno y verifico su valor. Agregue esto a su archivo spec_helper.rb

if ENV[''DRIVER''] ==''poltergeist'' //use any driver you want to run on circlci Capybara.default_driver = :poltergeist URL = // use your own end point like http://www.localhost:8080 else Capybara.default_driver = :selenium URL = // Use your end point end Capybara.configure do |config| config.app_host = URL end

Y luego en la consola ejecuta este comando

DRIVER = poltergeist rspec // para ejecutar la prueba en poltergeist

rspec // para ejecutar con selenio


Puede establecer una variable de entorno desde la línea de comandos que se puede usar en spec / spec_helper.rb:

DEBUG = ENV[''DEBUG''] || false if DEBUG Capybara.default_driver = :selenium else Capybara.default_driver = :rack_test Capybara.javascript_driver = :poltergeist end

Que luego se puede ejecutar desde la línea de comandos de esta manera:

DEBUG=true rspec spec/features/my_spec.rb:35

Esto le permitirá especificar un número de línea específico.

También es posible que tenga que cambiar su estrategia de limpieza según el controlador de capibara utilizado (es decir, con el limpiador de base de datos):

RSpec.configure do |config| config.before(:suite) do if DEBUG DatabaseCleaner.strategy = :truncation else DatabaseCleaner.strategy = :transaction end DatabaseCleaner.clean_with(:truncation) end end

Si quieres ser elegante, puedes combinarlo con esta respuesta : https://.com/a/5150855/95683 para ralentizar la velocidad a la que el selenio ejecuta las especificaciones cuando se están ejecutando en modo DEBUG:

config.before(:each) do |group| set_speed :slow if DEBUG end