Ответы:
expect { some_method }.to raise_error
Синтаксис RSpec 1:
lambda { some_method }.should raise_error
См. Документацию (для синтаксиса RSpec 1) и документацию RSpec 2 для получения дополнительной информации.
expect { some_method }.to raise_error
expect { some_method }.to raise_error(SomeError)
expect { some_method }.to raise_error("oops")
expect { some_method }.to raise_error(/oops/)
expect { some_method }.to raise_error(SomeError, "oops")
expect { some_method }.to raise_error(SomeError, /oops/)
expect { some_method }.to raise_error(...){|e| expect(e.data).to eq "oops" }
# Rspec also offers to_not:
expect { some_method }.to_not raise_error
...
Примечание: raise_error
и raise_exception
являются взаимозаменяемыми.
lambda { some_method }.should raise_error
lambda { some_method }.should raise_error(SomeError)
lambda { some_method }.should raise_error(SomeError, "oops")
lambda { some_method }.should raise_error(SomeError, /oops/)
lambda { some_method }.should raise_error(...){|e| e.data.should == "oops" }
# Rspec also offers should_not:
lambda { some_method }.should_not raise_error
...
Примечание: raise_error
это псевдоним для raise_exception
.
RSpec 2:
RSpec 1:
Вместо лямбды используйте ожидаемое:
expect { some_method }.to raise_error
Это относится к более поздним версиям rspec, т.е. rspec 2.0 и выше.
Смотрите документацию для более.
expect
она лучше или хуже lambda
.
expect { visit welcome_path }.to raise_error
Начиная с версии 3.3, в rspec-expections
геме выдается предупреждение о пустом рейзе без параметра
expect { raise StandardError }.to raise_error # results in warning
expect { raise StandardError }.to raise_error(StandardError) # fine
Это дает вам подсказку о том, что ваш код может завершиться с ошибкой, отличной от теста, предназначенного для проверки.
ПРЕДУПРЕЖДЕНИЕ: Использование
raise_error
Искателя без предоставления ошибки конкретной или сообщения рисков ложных срабатываний, так какraise_error
будет соответствовать , когда Руби поднимаетNoMethodError
,NameError
илиArgumentError
, потенциально позволяя ожидание пройти даже без выполнения метода вы намерены позвонить. Вместо этого рассмотрите возможность предоставления определенного класса ошибки или сообщения. Это сообщение может быть подавлено с помощью параметра:RSpec::Expectations.configuration.warn_about_potential_false_positives = false
.