Tôi đã viết spec này trong products_controller_spec.rb, đó là nhằm thử nghiệm một chuyển hướng khi phá hủy được gọi vào một kỷ lục không tồn tại:RecordNotFound tăng khi sử dụng find_by_id để có được kỷ lục không tồn tại trong RSpec
it "deleting a non-existent product should redirect to the user's profile page with a flash error" do
delete :destroy, {:id => 9999}
response.should redirect_to "/profile"
flash[:error].should == I18n.t(:slideshow_was_not_deleted)
end
đây là hành động điều khiển trong products_controller.rb:
Bây giờ, tôi không mong đợi spec để vượt qua lần đầu tiên nhưng tôi không hiểu tại sao nó thất bại với điều này:
Failure/Error: delete :destroy, {:id => 9999}
ActiveRecord::RecordNotFound:
Couldn't find Product with id=9999
Tôi đã có ấn tượng rằng #find_by_id sẽ không trả về lỗi RecordNotFound trên bản ghi không tồn tại. Vì vậy, tại sao tôi nhận được một? Cảm ơn trước!
Bạn sử dụng phiên bản Rails nào? 'find_by_id' này hoạt động tốt ở đây với Rails 3.2.3. (trả lại số không thay vì tăng RecordNotFound) – Deradon
3.2.2 tại đây. Tôi nên thêm rằng find_by_id hoạt động trong trình duyệt. Tôi chỉ nhận được RecordNotFound trong các kết quả spec. – theflyingbrush
- Trên thực tế, chỉ cần thử trong trình duyệt với một hành động hiển thị trên một bản ghi không tồn tại và có một RecordNotFound. Đã đi xa khi tôi nhận xét ra xác thực CanCan trong bộ điều khiển. Có vẻ như CanCan đang ném RnF – theflyingbrush