subject
принимает блок, который возвращает тему остатка.
То, что вы хотите, это:
describe 'test' do
subject { lambda { raise 'an exception' } }
it { should raise_exception }
end
Редактировать: уточнение из комментария
Это:
describe 'test' do
subject { foo }
it { should blah_blah_blah }
end
более или менее эквивалентно
(foo).should blah_blah_blah
Теперь рассмотрим: без lambda
это становится:
(raise 'an exception').should raise_exception
Смотрите здесь, что исключение возникает при оценке объекта (до вызова should
вообще).Принимая во внимание, что с лямбдой это становится:
lambda { raise 'an exception' }.should raise_exception
Здесь субъектом является лямбда, которая оценивается только при оценке вызова should
(в контексте, где будет поймано исключение).
Хотя «субъект» оценивается заново каждый раз, он все равно должен оценивать то, что вы хотите назвать should
на.