开发者

Expecting errors in rspec tests

开发者 https://www.devze.com 2022-12-21 11:12 出处:网络
I\'m trying to expect an error in an rspec test. lambda {Participant.create!({:user_id => three.id, :match_id => match.id, :team => 1})}.should raise_error StandardError

I'm trying to expect an error in an rspec test.

lambda {Participant.create!({:user_id => three.id, :match_id => match.id, :team => 1})}.should raise_error StandardError

For now I'm just using StandardError to make sure it's working.

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/m开发者_开发问答odels/participant.rb:12:in `do_not_exceed_player_count_in_match'
./spec/models/participant_spec.rb:24:

It clearly throws the error, but my test still fails.

Thoughts?


Since some time, but at least in RSpec 2.5, it is possible to use

expect {raise 'boom'}.to raise_error(RuntimeError, /boom/)


Your syntax looks correct. To debug this, simplify to make sure your spec is coded correctly.

it "should raise an error" do
  lambda {raise "boom"}.should raise_error
end

And then add more detail until it breaks.

lambda {raise "boom"}.should raise_error(RuntimeError)
lambda {raise StandardError.new("boom")}.should raise_error(StandardError)


I had to fight with the same symptoms:

def boom
  raise "boom"
end
boom.should raise_error

The test above fails because raise_error requires should to be called on a Proc (due to technical reasons, I suppose). Thus, wrapping a method call with a lambda works just fine:

  lambda { boom }.should raise_error

Unfortunately, the documentation does not say that explicitly and there is no RSpec Exception that reveals this behavior. There is a two year old ticket for that.

0

精彩评论

暂无评论...
验证码 换一张
取 消