我试图在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:
它明显抛出错误,但我的测试仍然失败。
思想?
答案 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。