Ожидание ошибок в тестах 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:

Это ясно бросает ошибку, но мой тест все еще перестал работать.

Мысли?

27
задан Prakash Murthy 17 February 2013 в 17:05
поделиться

2 ответа

Ваш синтаксис выглядит правильным. Чтобы отладить это, упростите, чтобы убедиться, что ваша спецификация закодирована правильно.

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)
35
ответ дан 28 November 2019 в 04:16
поделиться

Мне пришлось бороться с теми же симптомами:

def boom
  raise "boom"
end
boom.should raise_error

Тест выше не работает, потому что raise_error требует, чтобы should вызывался на Proc (по техническим причинам, я полагаю). Таким образом, обертывание вызова метода лямбдой работает просто отлично:

  lambda { boom }.should raise_error

К сожалению, в документации это не сказано явно, и нет RSpec Exception, который показывает такое поведение. Для этого существует тикет двухлетней давности.

5
ответ дан 28 November 2019 в 04:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: