BDD Focado com Guarda

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, --drbna --cliopçã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-fastopção na --cliopçã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