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