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_error
i raise_exception
są 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_error
to 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.
expect
jest lepszy czy gorszy niż lambda
.
expect { visit welcome_path }.to raise_error
Od wersji 3.3 na rspec-expections
klejnotach 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_error
dopasowywania bez podania konkretnego błędu lub komunikatu grozi fałszywymiraise_error
trafieniami , ponieważ będzie pasować, gdy Ruby podniesie wartośćNoMethodError
,NameError
lubArgumentError
, 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
.