rails example databasecleaner ruby-on-rails rspec

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.