webentwicklung-frage-antwort-db.com.de

Wie verwende ich RSpecs should_raise mit jeder Art von Ausnahme?

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.

211
marcgg
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 .

380
Avdi

RSpez 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
...

Hinweis: raise_error und raise_exception sind austauschbar.

RSpez 1

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.

Dokumentation: https://www.relishapp.com/rspec

RSpec 2:

RSpec 1:

86

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 .

84
racc

Die Syntax hat sich kürzlich geändert und jetzt ist es:

expect { ... }.to raise_error(ErrorClass)
65
ayckoster

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, da raise_error wird übereinstimmen, wenn Ruby ein NoMethodError, NameError oder ArgumentError 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.

4
Bruno E.