Jawaban:
expect { some_method }.to raise_error
Sintaks RSpec 1:
lambda { some_method }.should raise_error
Lihat dokumentasi (untuk sintaksis RSpec 1) dan dokumentasi RSpec 2 untuk lebih lanjut.
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
...
Catatan: raise_error
dan raise_exception
dapat dipertukarkan.
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
...
Catatan: raise_error
adalah alias untuk raise_exception
.
RSpec 2:
RSpec 1:
Alih-alih lambda, gunakan harapkan untuk:
expect { some_method }.to raise_error
Ini berlaku untuk versi rspec yang lebih baru, yaitu rspec 2.0 dan lebih tinggi.
Lihat acara dokumenter untuk lebih.
expect
lebih baik atau lebih buruk daripada lambda
.
expect { visit welcome_path }.to raise_error
Dari versi 3.3 on rspec-expections
gem memunculkan peringatan untuk rais_error kosong tanpa parameter
expect { raise StandardError }.to raise_error # results in warning
expect { raise StandardError }.to raise_error(StandardError) # fine
Ini memberi Anda petunjuk bahwa kode Anda mungkin gagal dengan kesalahan yang berbeda dari tes yang dimaksudkan untuk memeriksa.
PERINGATAN: Menggunakan
raise_error
pencocokan tanpa memberikan kesalahan spesifik atau pesan berisiko positif palsu, karenaraise_error
akan cocok ketika Ruby menaikkanNoMethodError
,NameError
atauArgumentError
, berpotensi membiarkan harapan lewat tanpa bahkan menjalankan metode yang ingin Anda panggil. Alih-alih mempertimbangkan untuk memberikan kelas kesalahan atau pesan tertentu. Pesan ini dapat ditekan dengan pengaturan:RSpec::Expectations.configuration.warn_about_potential_false_positives = false
.