Câu trả lời:
expect { some_method }.to raise_error
Cú pháp RSpec 1:
lambda { some_method }.should raise_error
Xem tài liệu (đối với cú pháp RSpec 1) và tài liệu RSpec 2 để biết thêm.
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
...
Lưu ý: raise_errorvà raise_exceptioncó thể hoán đổi cho nhau.
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
...
Lưu ý: raise_errorlà một bí danh cho raise_exception.
RSpec 2:
RSpec 1:
Thay vì lambda, hãy sử dụng mong đợi:
expect { some_method }.to raise_error
Điều này được áp dụng cho các phiên bản gần đây hơn của rspec, tức là rspec 2.0 trở lên.
Xem doco để biết thêm.
expecttốt hơn hay tệ hơn lambda.
expect { visit welcome_path }.to raise_error
Từ phiên bản 3.3 trên rspec-expectionsđá quý sẽ đưa ra cảnh báo cho một grow_error trống mà không có tham số
expect { raise StandardError }.to raise_error # results in warning
expect { raise StandardError }.to raise_error(StandardError) # fine
Điều này cung cấp cho bạn một gợi ý rằng mã của bạn có thể thất bại với một lỗi khác với thử nghiệm dự định kiểm tra.
CẢNH BÁO: Sử dụng công cụ đối sánh
raise_errormà không cung cấp một lỗi cụ thể hoặc thông báo có nguy cơ sai, vìraise_errorsẽ khớp khi Ruby tăngNoMethodError,NameErrorhoặcArgumentError, có khả năng cho phép kỳ vọng vượt qua mà không thực hiện phương thức bạn định gọi. Thay vào đó hãy xem xét việc cung cấp một lớp lỗi hoặc thông báo cụ thể. Thông báo này có thể được nén bằng cách cài đặt :RSpec::Expectations.configuration.warn_about_potential_false_positives = false.