2012-02-08 8 views
6

Sto eseguendo spork e guardia e tutto sta andando molto bene con i miei test RSpec, che sono stati tutti eseguiti correttamente. Per accelerare i test, ho potuto filtrare i miei test RSPec con i tag che ho inserito nel mio file .rspec.Come si ottiene cetriolo/guardia per filtrare su tag come @wip?

.rspec

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

Purtroppo, però non sono stato in grado di filtrare i miei tag cetriolo. Ogni volta che viene eseguito il cetriolo, viene eseguito sia tutto o solo il file modificato.

Come posso ottenere cetriolo/spork/guardia per rispettare i tag come @wip, @now ecc. Ed eseguire solo quei test? C'è qualche equivalente al file .rspec per i tag cetriolo?

risposta

3

È possibile utilizzare un profilo di cetriolo per definire i tag che si desidera eseguire. Utilizzando il file YML, è possibile definire un profilo che esegue i tag @wip:

wip: --tags @wip 

Maggiori informazioni su:

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

È anche possibile eseguire il cetriolo dalla riga di comando e farlo passare l'argomento -t:

cucumber -t @wip,@now 

Dalla aiuto (-h cetriolo):

Esegui solo le funzioni o gli scenari con i tag corrispondenti a TAG_EXPRESSION. Gli scenari ereditano tag dichiarati al livello Caratteristica. Il più semplice TAG_EXPRESSION è semplicemente un tag. Esempio: --tags @dev. Quando un tag in un tag inizia con un ~, questo rappresenta NOT booleano. Esempio: --tags ~ @ dev. Un'espressione di tag può avere diversi tag separati da una virgola, che rappresenta OR logico. Esempio: --tags @ dev, @ wip. L'opzione --tags può essere specificata diverse volte e questo rappresenta l'AND logico. Esempio: --tags @ foo, ~ @bar --tags @zap. Questo rappresenta l'espressione booleana (@pippo || @pluto!) & & @zap

Quindi, in teoria, si può utilizzare il guardfile con queste opzioni:

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

Grazie per quel Dan. Posso eseguire tag dalla riga di comando, ma non posso per quanto ne so passare le opzioni al comando 'bundle exec guard', così come suggerisci che il file del profilo deve essere la chiave. Tornerò quando posso confermare che ho funzionato –

+0

Ciao Dan, ho appena provato il tuo suggerimento e anche se non riesco a farlo funzionare sospetto che sia il mio errore nell'implementazione. Vorrei segnare la tua risposta come quella giusta. Potresti incorporare la risposta che ho messo qui sotto per mostrare come passare gli argomenti della linea di comando tramite il file di guardia. Se riesci a farlo, cancellerò il mio e contrassegno il tuo come giusto. –

+0

Come sta Pete? Fammi sapere i tuoi commenti. –

0

Anche se in teoria dovrebbe essere possibile fare questo lavoro usando i profili di cetriolo ho scoperto che dovevo usare lo guardfile.

guardfile originale

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

modificato guardfile

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

Un concetto importante da capire è che c'è una differenza tra tag e profili. Sto anche utilizzando Guard con Cucumber ed ero frustrato che il profilo predefinito continuasse ad essere utilizzato e nessuno dei miei tag @wip (Work In Progress) fosse stato prelevato. È ovvio ora perché è stato così. Come affermato da altri in altri forum, il mio profilo predefinito 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 viene filtrato qui a std_opts

voglio utilizzare il profilo 'WIP', che includerebbe scenari o funzioni contrassegnate da '@wip'

WIP: --drb <% = wip_opts%>--tags @wip: 3 --wipe caratteristiche "< = il numero rappresenta il numero massimo di scenari da eseguire; '--wip' indica che Cuc si aspetta che il test fallisca (perché ci stiamo lavorando)

Quindi i tag sono già configurati e ho incluso '@wip' nel mio file * .feature. E i profili? Quando si utilizza Guard (Spork), per utilizzare il profilo "wip", è necessario configurarlo. Ha senso; il computer non può leggere nella mia mente! Aggiorna il file Guard per usare il profilo '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 'cetriolo',: cli => "--drb -p wip" < = '-p' per specificare il profilo desiderato

E ora i miei scenari vengono filtrati con successo da "wip".

2

Non sono sicuro quando questa opzione è stata introdotta, ma guard-cetriolo ha la capacità di concentrarsi su un particolare tag (che è diverso rispetto a codificare un tag specifico per filtrarlo sempre). È possibile lasciare questa opzione di configurazione nel vostro Guardfile e utilizzare solo il tag fuoco quando ne avete bisogno:

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

# example.feature 
Feature: Example 

    @myfocustag 
    Scenario: Only run this one 
    ... 

cetriolo-guardia sarà poi filtrare questi scenari prima di passarli al comando cetriolo. La rimozione di questi tag comporterebbe il comportamento predefinito (eseguendo tutti gli scenari, piuttosto che nessuno).

0

Ora, se si vuole Guardia di eseguire sempre @wip come me allora nel tuo componente aggiuntivo:

cetriolo.yml

guard: --format pretty --tags @wip 

Guardfile

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

che un file viene modificato guardato allora solo @wip sta per essere eseguito, ma anche quando si digita cucumber nella console guardia.

Problemi correlati