Я пытаюсь ожидать ошибку в 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:
Это ясно бросает ошибку, но мой тест все еще перестал работать.
Мысли?
Ваш синтаксис выглядит правильным. Чтобы отладить это, упростите, чтобы убедиться, что ваша спецификация закодирована правильно.
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)
Мне пришлось бороться с теми же симптомами:
def boom
raise "boom"
end
boom.should raise_error
Тест выше не работает, потому что raise_error
требует, чтобы should
вызывался на Proc
(по техническим причинам, я полагаю). Таким образом, обертывание вызова метода лямбдой работает просто отлично:
lambda { boom }.should raise_error
К сожалению, в документации это не сказано явно, и нет RSpec Exception, который показывает такое поведение. Для этого существует тикет двухлетней давности.