Porque não gosto de usar “should” nos testes de RSpec
Desde que li o post RSpec Best Practices de Jared Carroll (post o qual David Chelimsky prefere citar como Good Guidelines) eu prefiro não mais utilizar o termo should para todos os exemplos (testes) de RSpec.
Primeiro que concordo com Jared sobre a redundância da palavra should e como o resultado dos testes ficam mais claros quando rodamos no formato de documentação.
Abaixo dois exemplos (extraídos do post de Jared).
O primeiro usa should:
$ rspec spec/controllers/posts_controller_spec.rb --format documentation
PostsController
#new
when not logged in
should redirect to the sign in page
should display a message to sign in
Agora eliminando o should e usando o verbo na terceira pessoa:
$ rspec spec/controllers/posts_controller_spec.rb --format documentation
PostsController
#new
when not logged in
redirects to the sign in page
displays a message to sign in
A segunda razão é a questão gramatical e do sentido dos testes.
O verbo modal should, entre outros significados, pode ser considerado uma obrigação, mas é uma obrigação gentil, cuidadosa, sem muita firmeza.
When not logged in, should redirect to the sign in page.
Quando não logado, deveria redirecionar para a página de login.
Deveria ou deve? Para o teste passar tem que redirecionar para a página de login. Se não redirecionar, o teste falhará. Nessa caso, gramaticalmente, não é melhor usar o verbo modal must, que expressa uma obrigação impreterível?
Então, para ficar simples, uso o verbo na terceira pessoa, evito verbos modais repetitivos e deixo explícito o que o teste está assegurando.
When not logged in, redirects to the sign in page.
Quando não logado, redireciona para a tela de login.










Comentários