2012-04-17 25 views
6

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!

+1

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

+0

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

+0

- 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

Trả lời

16

Lỗi RecordNotFound đã được CanCan ném. Nó không thể giải cứu được từ bên trong hành động điều khiển (có lẽ nó xảy ra trước khi hành động chạy). Có hai cách để giải quyết nó -

  1. Thay đổi spec:

    it "deleting a non-existent product should result in a RecordNotFound Error" do   
        product_id = 9999 
        expect { delete :destroy, {:id => product_id}}.to raise_error ActiveRecord::RecordNotFound 
    end 
    

hay, 2. Patching Cancan like this.

Tôi không ưa thích lộ trình vá, vì vậy tôi đã chọn tùy chọn 1.

Các vấn đề liên quan