Ich würde gerne so etwas machen:
some_method.should_raise <any kind of exception, I don't care>
Wie soll ich das machen?
some_method.should_raise exception
... funktioniert nicht.
expect { some_method }.to raise_error
RSpec 1-Syntax:
lambda { some_method }.should raise_error
Weitere Informationen finden Sie unter Dokumentation (RSpec 1-Syntax) und RSpec 2-Dokumentation .
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
...
Hinweis: raise_error
und raise_exception
sind austauschbar.
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
...
Hinweis: raise_error
ist ein Alias für raise_exception
.
RSpec 2:
RSpec 1:
Verwenden Sie anstelle von Lambda Folgendes:
expect { some_method }.to raise_error
Dies gilt für neuere Versionen von rspec, d. H. Rspec 2.0 und höher.
Weitere Informationen finden Sie in doco .
Die Syntax hat sich kürzlich geändert und jetzt ist es:
expect { ... }.to raise_error(ErrorClass)
Ab Version 3.3 rspec-expections
gem gibt eine Warnung für einen leeren raise_error ohne Parameter aus
expect { raise StandardError }.to raise_error # results in warning
expect { raise StandardError }.to raise_error(StandardError) # fine
Dies gibt Ihnen einen Hinweis darauf, dass Ihr Code möglicherweise mit einem anderen Fehler als dem zu überprüfenden Test fehlschlägt.
WARNUNG: Mit dem
raise_error
Matcher ohne Angabe eines bestimmten Fehlers oder einer bestimmten Meldung kann zu Fehlalarmen führen, daraise_error
wird übereinstimmen, wenn Ruby einNoMethodError
,NameError
oderArgumentError
auslöst, wodurch möglicherweise die Erwartung vergehen kann, ohne dass Sie die Methode ausführen beabsichtigen anzurufen. Geben Sie stattdessen eine bestimmte Fehlerklasse oder Meldung an. Diese Meldung kann unterdrückt werden, indem Sie Folgendes festlegen:RSpec::Expectations.configuration.warn_about_potential_false_positives = false
.