期待rspec测试中的错误

时间:2010-03-01 22:06:54

标签: ruby-on-rails rspec

我试图在rspec测试中发现错误。

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

现在我只是使用StandardError来确保它正常工作。

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:

它明显抛出错误,但我的测试仍然失败。

思想?

3 个答案:

答案 0 :(得分:45)

从一段时间以来,至少在RSpec 2.5中,可以使用

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

答案 1 :(得分:34)

您的语法看起来正确。要进行调试,请简化以确保您的规范编码正确。

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

然后添加更多细节,直到它中断。

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

答案 2 :(得分:5)

我不得不与同样的症状作斗争:

def boom
  raise "boom"
end
boom.should raise_error

上述测试失败,因为raise_error要求在should上调用Proc(由于技术原因,我认为)。因此,使用lambda包装方法调用可以正常工作:

  lambda { boom }.should raise_error

不幸的是,文档没有明确说明并且没有RSpec Exception可以揭示这种行为。对此有一个two year old ticket