Duas dicas rápidas sobre RSpec
- Não utilize a sintaxe abaixo:
something.should != value |
something.should != value
A razão para isso é que != é uma expressão, enquanto ==, >=, <= e outros são métodos (podermos utilizá-los sem o "." é açúcar sintático da linguagem). Dessa forma, por mais que na maioria dos casos isso não incorra em efeitos indesejados (a expressão retorna um booleano, o que, em geral, basta) mas a equipe que desenvolve o RSpec recomenda evitar o uso, preferindo a sintaxe abaixo:
something.should_not == value |
something.should_not == value
E para verificar essa diferença, veja abaixo:
ree-1.8.7-2010.02 > 1.== 1
=> true
ree-1.8.7-2010.02 > 2.>= 1
=> true
ree-1.8.7-2010.02 > 2.!= 1
SyntaxError: compile error
(irb):3: syntax error, unexpected tNEQ
2.!= 1
^
from (irb):3 |
ree-1.8.7-2010.02 > 1.== 1
=> true
ree-1.8.7-2010.02 > 2.>= 1
=> true
ree-1.8.7-2010.02 > 2.!= 1
SyntaxError: compile error
(irb):3: syntax error, unexpected tNEQ
2.!= 1
^
from (irb):3
- Essa é até bem conhecida, mas vejo um número considerável de pessoas fazendo outra coisa tentando fazer isso: ao configurar callbacks para executar código de setup/teardown antes ou depois de toda a suíte, no bloco de configuração, podemos controlar a ordem com os métodos prepend_before e append_after:
Spec::Runner.configure do |config|
# antes da suite
config.before(:suite) do #alias para append_before (ou seja, depois de outros blocos "before")
# fazer alguma coisa, provavelmente setup
end
# depois da suite
config.after(:suite) do #alias para prepend_after (ou seja, antes de outros blocos "after")
# fazer alguma coisa, provavelmente cleanup
end
# Podemos ter um controle mais fino da ordem de execução dos callbacks
# antes de tudo, inclusive do bloco "config.before" um pouco acima
config.prepend_before(:suite)
# setup do setup ;)
end
# após tudo, inclusive do bloco "config.after" um pouco acima
config.append_after(:suite)
# teardown do teardown ;)
end
end |
Spec::Runner.configure do |config|
# antes da suite
config.before(:suite) do #alias para append_before (ou seja, depois de outros blocos "before")
# fazer alguma coisa, provavelmente setup
end
# depois da suite
config.after(:suite) do #alias para prepend_after (ou seja, antes de outros blocos "after")
# fazer alguma coisa, provavelmente cleanup
end
# Podemos ter um controle mais fino da ordem de execução dos callbacks
# antes de tudo, inclusive do bloco "config.before" um pouco acima
config.prepend_before(:suite)
# setup do setup ;)
end
# após tudo, inclusive do bloco "config.after" um pouco acima
config.append_after(:suite)
# teardown do teardown ;)
end
end
1 Comentário