2011-08-28 9 views
7

Vấn đề đơn giản (tôi đã nghĩ), nhưng tôi đang gặp một số vấn đề:Rails RSpec Routing: Thử nghiệm các hành động trong: ngoại trừ KHÔNG tuyến

Trong Rails 3.1.0.rc6/RSpec 2.6.0 , tôi đang cố gắng để kiểm tra định tuyến nguồn 'sản phẩm' của tôi, chuyển như thế này:

resources :products, :except => [:edit, :update] 

Định tuyến cho các hành động có giá trị công trình, nhưng tôi muốn đảm bảo rằng các chỉnh sửa và cập nhật các tuyến đường không có thể gọi được. Dưới đây là những gì tôi đang cố gắng:

it "does not route to #edit" do 
    lambda { get("/products/1/edit") }.should raise_error 
end 

Failure/Error: lambda { get("/products/1/edit") }.should raise_error expected Exception but nothing was raised # ./spec/routing/products_routing_spec.rb:11:in `block (3 levels) in '

... Chưa hết, khi tôi chạy

it "does not route to #edit" do 
    get("/products/1/edit").should_not route_to("products#edit", :id => "1") 
end 

tôi nhận được

Failure/Error: get("/products/1/edit").should_not route_to("products#edit", :id => "1") ActionController::RoutingError: No route matches "/products/1/edit"

Bất kỳ ý tưởng những gì đang xảy ra ở đây? Tôi đoán điều này khá đơn giản, nhưng tôi không thể hình dung ra được.

Trả lời

9

Tôi không biết tại sao lambda sẽ thất bại, nhưng tôi không nghĩ rằng dsl rspec-ray được dự định sẽ được sử dụng như thế. Bạn đã thử một cái gì đó như thế này?

{ :get => "/products/1/edit" }.should_not be_routable 

http://relishapp.com/rspec/rspec-rails/docs/routing-specs/be-routable-matcher

Vì vậy, bạn không thể xác định những gì nó không đường tới, nhưng bạn có thể xác định rằng nó không được chuyển.

+0

Chúng tôi có một người chiến thắng. Strange - Tôi nghĩ Rails 2 được sử dụng để xử lý "lỗi nâng cao" lambdas, nhưng rõ ràng là không 3.1. Thậm chí không nhận thức được phương pháp be_routable - cảm ơn rất nhiều. – PlankTon

+1

Rất hữu ích! Chỉ cần một lưu ý nhanh: kiểm tra trên PHẢI nằm trong /spec/routing/xxxx.rb hoặc nó sẽ thất bại với một lỗi. Bạn không thể, ví dụ, có điều này trong /spec/requests/xxxx.rb –

0

Bạn có tuyến đường dự phòng không? Bởi vì điều đó sẽ giải thích tại sao không có lỗi nào được ném, nhưng thực sự cố gắng để đánh giá route_to("products#edit", :id => 1) sẽ tăng lên, bởi vì tuyến đường không tồn tại.

+0

Ý tưởng hay, nhưng không. Đây là một dự án trần - bắt đầu từ chiều nay. Không có chuyển hướng nào được thiết lập - hiện tại, nó chỉ là các nguồn tài nguyên không có sẵn, rspec & dưa chuột. – PlankTon