ruby on rails - example - Esperando errores en las pruebas rspec
ruby capybara github (3)
Desde hace algún tiempo, pero al menos en RSpec 2.5, es posible utilizar
expect {raise ''boom''}.to raise_error(RuntimeError, /boom/)
Estoy tratando de esperar un error en una prueba rspec
.
lambda {Participant.create!({:user_id => three.id, :match_id => match.id, :team => 1})}.should raise_error StandardError
Por ahora solo uso StandardError
para asegurarme de que funcione.
1) StandardError in ''Participant should never allow more participants than players''.
This game is already full. Cannot add another player.
/home/josiah/Projects/Set-Match/app/models/participant.rb:12:in `do_not_exceed_player_count_in_match''
./spec/models/participant_spec.rb:24:
Claramente arroja el error, pero mi prueba todavía falla.
¿Pensamientos?
Tu sintaxis parece correcta. Para depurar esto, simplifique para asegurarse de que su especificación esté codificada correctamente.
it "should raise an error" do
lambda {raise "boom"}.should raise_error
end
Y luego agregar más detalles hasta que se rompa.
lambda {raise "boom"}.should raise_error(RuntimeError)
lambda {raise StandardError.new("boom")}.should raise_error(StandardError)
Tuve que luchar con los mismos síntomas:
def boom
raise "boom"
end
boom.should raise_error
La prueba anterior falla porque se should
llamar a raise_error
en un Proc
(debido a razones técnicas, supongo). Por lo tanto, envolver una llamada a un método con un lambda funciona bien:
lambda { boom }.should raise_error
Desafortunadamente, la documentación no lo dice explícitamente y no hay una excepción RSpec que revele este comportamiento. Hay un boleto de dos años para eso.