Ожидаемые ошибки в тестах rspec - PullRequest
26 голосов
/ 02 марта 2010

Я пытаюсь ожидать ошибку в 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 ]

45 голосов
/ 16 мая 2011

С некоторого времени, но по крайней мере в RSpec 2.5 можно использовать

expect {raise 'boom'}.to raise_error(RuntimeError, /boom/)
34 голосов
/ 02 марта 2010

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

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)
5 голосов
/ 14 июля 2010

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

def boom
  raise "boom"
end
boom.should raise_error

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

  lambda { boom }.should raise_error

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...