Archive for the ‘rspec’ Category
Economize tempo e mantenha o foco ao rodar seus testes
Testar é bom. Esperar os testes rodarem, não. Quando um teste específico falha, o ideal é rodar apenas esse teste e não toda a suíte de testes novamente. Depois que esse cara estiver passando, ai sim rodamos tudo, para termos certeza de que nada mais quebrou. Além disso, se você estiver escrevendo testes para uma app Rails, sabe que sempre que você faz rake spec todo o seu banco é recarregado. Ok, legal… mas e se você quiser rodar apenas um arquivo de specs onde tudo é feito com mocks/stubs e não há acesso ao banco? Porque esperar todo o banco ser carregado?
Seguem abaixo algumas dicas para agilizar a execução dos seus testes.
Para o Rspec
Rodar apenas um arquivo (carregando o banco de teste):
rake spec SPEC=[caminho para o arquivo]_spec.rb
Rodar apenas um arquivo (sem carregar o banco, útil por exemplo para rodar specs de controllers/helpers quando utiliza-se mocks/stubs)
spec [caminho para o arquivo]_spec.rb
Rodar apenas um teste específico dentro do seu arquivo (10 é o número da linha onde se encontra o bloco ‘it’ que você quer executar. Funciona de forma idêntica caso você use o comando ’spec’ ao invés de ‘rake’)
rake spec SPEC=[caminho para o arquivo]_spec.rb:10
Para o Cucumber
Rodar apenas um arquivo
rake features FEATURE=features/[seu arquivo].feeature
Rodar apenas um cenário (10 é a linha onde começa a declaração do cenário)
rake features FEATURE=features/[seu arquivo].feature:10
Testar atributos do tipo datetime com o Rspec
Você já tentou usar o Rspec para testar se o timestamp gravado em um campo datetime é igual a uma determinada data/horário? O código abaixo possivelmente irá falhar miseravelmente:
@blabla.update_attributes(:foo => "bar) @blabla.updated_at.should == Time.now
o Time.now é bem preciso e vai pegar várias casas na faixa dos milissegundos, e isso pode gerar alguma diferença entre o retorno de Time.now quando a coluna foi atualizada no banco e quando você realiza a asserção no teste. Uma solução para o problema é fazer:
@blabla.updated_at.should be_close(Time.now, 1.second)
Esse teste passará para qualquer timestamp com uma diferença de +- 1 segundo em relação ao retorno do Time.now no momento da asserção. Altere esse delta T como desejar :).
Essa solução também é indicada para testar valores numéricos de ponto flutuante.


