Odpowiedzi:
expect { some_method }.to raise_error
Składnia RSpec 1:
lambda { some_method }.should raise_error
Zobacz dokumentację (składnia RSpec 1) i dokumentację RSpec 2, aby uzyskać więcej.
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
...
Uwaga: raise_errori raise_exceptionsą wymienne.
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
...
Uwaga: raise_errorto alias dla raise_exception.
RSpec 2:
RSpec 1:
Zamiast lambda użyj, aby:
expect { some_method }.to raise_error
Dotyczy to nowszych wersji rspec, tj. Rspec 2.0 i nowszych.
Zobacz dokumentację, aby uzyskać więcej.
expectjest lepszy czy gorszy niż lambda.
expect { visit welcome_path }.to raise_error
Od wersji 3.3 na rspec-expectionsklejnotach pojawia się ostrzeżenie o pustej podwyżce_błędu bez parametru
expect { raise StandardError }.to raise_error # results in warning
expect { raise StandardError }.to raise_error(StandardError) # fine
Daje to podpowiedź, że Twój kod może zawieść z innym błędem niż test przeznaczony do sprawdzenia.
OSTRZEŻENIE: Używanie modułu
raise_errordopasowywania bez podania konkretnego błędu lub komunikatu grozi fałszywymiraise_errortrafieniami , ponieważ będzie pasować, gdy Ruby podniesie wartośćNoMethodError,NameErrorlubArgumentError, potencjalnie umożliwiając oczekiwanie, nawet bez wykonania metody, którą zamierzasz wywołać. Zamiast tego rozważ podanie konkretnej klasy błędu lub komunikatu. Komunikat ten może być stłumiony przez ustawienie:RSpec::Expectations.configuration.warn_about_potential_false_positives = false.