2012-02-08 8 views
6

Estoy ejecutando spork and guard y todo ha ido muy bien con mis pruebas RSpec que se ejecutaron correctamente. Para acelerar las pruebas, pude filtrar con éxito mis pruebas de RSpec con las etiquetas que coloqué en mi archivo .rspec.¿Cómo se obtiene pepino/protector para filtrar etiquetas como @wip?

.rspec

--colour 
--debug 
--tag focus 
--tag now 

Lamentablemente, sin embargo no he sido capaz de filtrar mis etiquetas de pepino. Cada vez que se ejecuta pepino ejecuta todo o simplemente el archivo que ha cambiado.

¿Cómo puedo obtener pepino/spork/guardia para respetar etiquetas como @wip, @now etc. y ejecutar solo esas pruebas? ¿Hay algún equivalente al archivo .rspec para etiquetas de pepino?

Respuesta

3

Puede usar un perfil de pepino para definir las etiquetas que desea ejecutar. El uso del archivo YML, puede definir un perfil que ejecutar sus etiquetas: @wip

wip: --tags @wip 

Más información en:

https://github.com/cucumber/cucumber/wiki/cucumber.yml

También se puede simplemente ejecutar el pepino desde la línea de comandos y pasarlo el argumento -t:

cucumber -t @wip,@now 

De la ayuda (-h pepino):

Solo ejecuta las funciones o escenarios con etiquetas que coincidan con TAG_EXPRESSION. Los escenarios heredan las etiquetas declaradas en el nivel de Característica. El TAG_EXPRESSION más simple es simplemente una etiqueta. Ejemplo: --tags @dev. Cuando una etiqueta en una etiqueta expresión comienza con un ~, esto representa booleano NOT. Ejemplo: --tags ~ @ dev. Una expresión de etiqueta puede tener varias etiquetas separadas por una coma, que representa O lógico. Ejemplo: --tags @ dev, @ wip. La opción --tags se puede especificar varias veces, y esto representa AND lógico. Ejemplo: --tags @ foo, ~ @ bar --tags @zap. Esto representa la expresión booleana (@foo || @bar!) & & @zap

Por lo tanto, en teoría, podemos utilizar el guardfile con estas opciones:

guard 'cucumber', :cli => "--drb --tags @now" do 
    watch(%r{^features/.+\.feature$}) 
    ... 
end 
+0

Gracias por eso Dan. Puedo ejecutar etiquetas desde la línea de comandos, pero por lo que sé no puedo pasar las opciones al comando 'bundle exec guard' para que sugiera que el archivo de perfil debe ser la clave. Volveré cuando pueda confirmar que lo tengo funcionando –

+0

Hola Dan, acabo de probar tu sugerencia y aunque no puedo hacerlo funcionar, sospecho que es un error en la implementación. Me gustaría marcar su respuesta como la correcta. ¿Podría incorporar la respuesta que pongo a continuación para mostrar cómo pasar argumentos de línea de comando a través del archivo de guardia? Si puedes hacer eso, borraré el mío y marcaré el tuyo como correcto. –

+0

Hows that Pete? Hazme saber tus comentarios. –

0

Aunque en teoría debería ser posible hacer que esto funcione usando perfiles de pepino. Descubrí que tenía que usar el guardfile.

guardfile original

guard 'cucumber', :cli => "--drb" do 
    watch(%r{^features/.+\.feature$}) 
    ... 
end 

guardfile modificado

guard 'cucumber', :cli => "--drb --tags @now" do 
    watch(%r{^features/.+\.feature$}) 
    ... 
end 
2

Un concepto importante a entender es que hay una diferencia entre etiquetas y perfiles. También estoy usando Guard with Cucumber y me sentí frustrado porque se siguió utilizando el perfil predeterminado y no se recogieron las etiquetas @wip (Work In Progress). Es obvio ahora por qué fue ese el caso. Como afirman algunos en otros foros, mi perfil predeterminado filtra @wip.

< config/cucumber.yml>

<% 
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : "" 
rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}" 
base_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'}" 
std_opts = "#{base_opts} --strict --tags [email protected]" 
wip_opts = base_opts 
%> 
default: --drb <%= std_opts %> features 
wip: --drb <%= wip_opts %> --tags @wip:3 --wip features 
rerun: --drb <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags [email protected] 

"std_opts = "# {} base_opts --strict --tags ~ @ WIP" < = WIP se filtra a cabo aquí en std_opts

Quiero usar el perfil 'WIP', que incluiría escenarios o características marcadas por '@wip'

WIP: --drb <% = wip_opts%>--tags @wip: 3 - características de navegación "< = el número representa la cantidad máxima de escenarios para ejecutar; '--wip' indica que Cuc espera que la prueba falle (porque estamos trabajando en ello)

Entonces las etiquetas ya están configuradas y he incluido '@wip' en mi archivo * .feature. ¿Y los perfiles? Cuando se usa Guard (Spork), para que se use el perfil 'wip', debe configurarse. Que tiene sentido; ¡la computadora no puede leer mi mente! Actualice el archivo Guardfile para usar el perfil 'wip'.

< Guardfile>

guard 'cucumber', :cli => "--drb -p wip", :all_on_start => false, :all_after_pass => false do 
    watch(%r{^features/.+\.feature$}) 
    watch(%r{^features/support/.+$})   { 'features' } 
    watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' } 
end 

guardia 'pepino',: cli => "--drb -p WIP" < = '-p' para especificar el perfil deseado

Y ahora mis escenarios están siendo filtrados con éxito por 'wip'.

2

No está seguro cuando esta opción fue introducida, pero guarda-pepino tiene la capacidad de concentrarse en una etiqueta en particular (que es diferente que la codificación una etiqueta específica para filtrar por siempre). Puede dejar esta opción en su configuración Guardfile y sólo utilizar su etiqueta de enfoque cuando lo necesite:

# Guardfile 
guard 'cucumber', :focus_on => 'myfocustag' do 
    ... 
end 

# example.feature 
Feature: Example 

    @myfocustag 
    Scenario: Only run this one 
    ... 

pepino guardia entonces filtrar estos escenarios antes de pasarlos a la orden de pepino. La eliminación de estas etiquetas daría como resultado el comportamiento predeterminado (ejecutando todos los escenarios, en lugar de ninguno).

0

Ahora, si quieres Guardia para ejecutar siempre @wip como yo, entonces en su complemento:

pepino.yml

guard: --format pretty --tags @wip 

Guardfile

guard 'cucumber', :command_prefix => 'spring', :cli => '--profile guard', :bundler => false do 
    # your watches 
end 

que un archivo observado se modifica entonces sólo @wip se va a ejecutar, sino también cuando se escribe en la consola cucumber guardia.

Cuestiones relacionadas