Guarda é ótimo. RSpec é ótimo.
O que não é bom? Iniciando o Guard, esperando alguns minutos até que todas as especificações passem e eu possa começar a me concentrar na especificação atual.
O que mais não é tão bom? BDD tentando encontrar uma solução, obter uma especificação com falha, fazê-la passar, esperando imediatamente mais alguns minutos enquanto todo o pacote é executado novamente.
Se seus conjuntos de especificações não forem muito longos, você pode não se importar tanto. Qualquer coisa além de 20 segundos me deixa impaciente quando estou fazendo BDD / TDD.
Então o que fazer? Com guard-rspec, existem vários sinalizadores que você pode definir para ajudá-lo a ir mais rápido. Ou seja :all_on_start, :all_after_pass, :focus_on_failed
,.
Mas, essas configurações por si só não são boas o suficiente para mim. Às vezes, quero executar todo o pacote em cada mudança, mas não quando estou tentando uma solução. Então, o que eu faço é aproveitar os grupos do Guard para executar o pacote em diferentes “modos”.
Aqui está o meu Guardfile (cortado). Observe que eu também uso o Spork (portanto, --drb
na --cli
opção). Além disso, às vezes quero falhar rápido, às vezes não, então, em vez de mudar a Guarda o tempo todo, incluirei condicionalmente a --fail-fast
opção na --cli
opção.
# reuse this block in each guard-rspec invocation
rspec_block = lambda do
# ... watchers for specs
end
group :focused_specs do
guard 'rspec', :all_on_start => false, :all_after_pass => false, :focus_on_failed => true, :cli => "--color #{ENV['FF'] ? '--fail-fast' : ''} --drb", &rspec_block
end
group :tests do
guard 'rspec', :cli => "--color #{ENV['FF'] ? '--fail-fast' : ''} --drb", &rspec_block
# other non-RSpec tests
end