2012-02-06 16 views
9

Estoy intentando utilizar el Rspec antes (suite) enganchar con una etiqueta de este modo:Utilizando el RSpec antes gancho de baño con una etiqueta

config.before(:suite, :selenium => true) do 
    #magical awesomeness 
    end 

pero Rspec no parece respetar la etiqueta y ejecuta el código con el que solo quiero ejecutar: selenium => true independientemente.

Lo extraño es que yo estoy haciendo algo muy similar con el: cada gancho, así y que parece funcionar bien:

config.around(:each, :selenium => true) do |example| 
    Capybara.using_wait_time(10) do 
     Capybara.using_driver(:selenium) do 
     example.run 
     end 
    end 
    end 

Alguien sabe lo que estoy haciendo mal?

Respuesta

2

No lo he investigado a fondo, pero creo que el ámbito: suite se puede ejecutar antes de interpretar las etiquetas. Por lo que puedo pensar, solo querrías uno: suite de todos modos (aunque puedo ver el uso en tu ejemplo). Creo que es posible hacer una antes: todo eso haría lo mismo, siempre y cuando lo pongas "alto" lo suficiente, como por ejemplo en tu spec_helper.rb?

== == EDITAR

así que pensé en ello un poco más, y una solución que poped en mi cabeza era algo como esto:

# spec_helper.rb 
# run with the tag :selenium => true when you set your env var RUN_SELENIUM like so: 
# %> RUN_SELENIUM=1 bundle exec rspec spec/ 
config.filter_run_excluding :selenium => true if ENV['RUN_SELENIUM'].nil? 

# now your before suite hook can be something along the lines of 
config.before(:suite) do 
    if ENV['RUN_SELENIUM'].nil? 
    ## regular awesomeness 
    else 
    ## magical awesomeness 
    end 
end 

hice algo similar al encargo de etiquetas usando guardia y guardia-spec. Por supuesto, puede usar el env var sin filter_run_exclusing, y eso sería lo mismo que: %> RUN_SELENIUM = 1 bundle exec rspec --tag selenium spec/ Agregar la línea de configuración solo ayuda a mantenerlo constante.

Espero que ayude!

+0

Hey Poopinpants (nombre increíble por cierto), Sí el RSpec Core estado docs "Advertencia: antes (suite,: con =>: condiciones) se utiliza el condiciones de hash para que coincida con ejemplos específicos. Como before (: suite) no se ejecuta en relación con ningún ejemplo o grupo específico, las condiciones pasadas junto con: suite se ignoran de manera efectiva ". http://rubydoc.info/github/rspec/rspec-core/master/RSpec/Core/Hooks Sin embargo, usar un before (: all) en el spec_helper no ejecuta el asombro mágico varias veces en una suite completa, por lo que no es exactamente lo que estoy buscando. –

+0

Bien ... respuesta editada. Espero que ayude. –

+0

Gracias, esto funciona, y es inteligente. – vcardillo

3

Esto debería funcionar:

if config.inclusion_filter[:selenium] 
    config.before(:suite) do 
    #magical awesomeness 
    end 
end 
+0

Tenga en cuenta que es útil cambiar la configuración según la opción de línea de comando '--tag'. Con 'rspec spec --tag selenium',' config.inclusion_filter [: selenium] 'devuelve verdadero. – Nobu

+0

Esto no funciona para mí. Creo que antes: suite se ejecuta antes de que se interpreten las etiquetas. – vcardillo

Cuestiones relacionadas