Respostas:
expect { some_method }.to raise_error
Sintaxe do RSpec 1:
lambda { some_method }.should raise_error
Consulte a documentação (para sintaxe do RSpec 1) e a documentação do RSpec 2 para obter mais informações.
expect { some_method }.to raise_error
expect { some_method }.to raise_error(SomeError)
expect { some_method }.to raise_error("oops")
expect { some_method }.to raise_error(/oops/)
expect { some_method }.to raise_error(SomeError, "oops")
expect { some_method }.to raise_error(SomeError, /oops/)
expect { some_method }.to raise_error(...){|e| expect(e.data).to eq "oops" }
# Rspec also offers to_not:
expect { some_method }.to_not raise_error
...
Nota: raise_error
e raise_exception
são intercambiáveis.
lambda { some_method }.should raise_error
lambda { some_method }.should raise_error(SomeError)
lambda { some_method }.should raise_error(SomeError, "oops")
lambda { some_method }.should raise_error(SomeError, /oops/)
lambda { some_method }.should raise_error(...){|e| e.data.should == "oops" }
# Rspec also offers should_not:
lambda { some_method }.should_not raise_error
...
Nota: raise_error
é um alias para raise_exception
.
RSpec 2:
RSpec 1:
Em vez de lambda, use expect para:
expect { some_method }.to raise_error
Isso se aplica a versões mais recentes do rspec, ou seja, rspec 2.0 e superior.
Veja o documento para mais informações.
expect
é melhor ou pior que lambda
.
expect { visit welcome_path }.to raise_error
A partir da versão 3.3 no rspec-expections
gem, gera um aviso para um raise_error em branco sem um parâmetro
expect { raise StandardError }.to raise_error # results in warning
expect { raise StandardError }.to raise_error(StandardError) # fine
Isso dá uma dica de que seu código pode falhar com um erro diferente do que o teste pretendia verificar.
AVISO: Usar o
raise_error
combinador sem fornecer um erro ou mensagem específica corre o risco de falsos positivos, poisraise_error
corresponderá quando Ruby gerar aNoMethodError
,NameError
ouArgumentError
, potencialmente permitindo que a expectativa passe sem executar o método que você pretende chamar. Em vez disso, considere fornecer uma classe ou mensagem de erro específica. Esta mensagem pode ser suprimida por definição:RSpec::Expectations.configuration.warn_about_potential_false_positives = false
.