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_error
và raise_exception
có 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_error
là 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.
expect
tố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_error
mà không cung cấp một lỗi cụ thể hoặc thông báo có nguy cơ sai, vìraise_error
sẽ khớp khi Ruby tăngNoMethodError
,NameError
hoặ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
.