Відповіді:
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 і вище.
Докладніше див. У doco .
expect
це краще чи гірше lambda
.
expect { visit welcome_path }.to raise_error
З версії 3.3 на rspec-expections
gem виникає попередження про порожній піднімаючий_помилка без параметра
expect { raise StandardError }.to raise_error # results in warning
expect { raise StandardError }.to raise_error(StandardError) # fine
Це дає вам підказку, що ваш код може вийти з помилки, відмінної від тесту, який планується перевірити.
ПОПЕРЕДЖЕННЯ: Використання
raise_error
матчера без надання конкретної помилки чи повідомлення загрожує помилковим спрацьовуванням, оскільки воноraise_error
збігатиметься, коли Ruby піднімає aNoMethodError
,NameError
абоArgumentError
, можливо, дозволяє очікуванню пройти, навіть не виконуючи метод, який ви збираєтесь викликати. Натомість розгляньте можливість надання конкретного класу помилок або повідомлення. Це повідомлення може бути придушене з допомогою параметра:RSpec::Expectations.configuration.warn_about_potential_false_positives = false
.