2011-09-06 37 views
6

Trong các tuyến đường của tôi nộp Tôi có:Làm cách nào để xác định giao thức https trong định tuyến thông số với rspec?

resources :subscription, :only => [:show], :constraints => {:protocol => "https"} 

Tôi đang cố gắng để thêm một spec cho tuyến đường này như thế này:

it "recognizes and generates #show" do 
    { :get => "/subscription", :protocol => 'https' }.should route_to(:controller => "subscriptions", :action => "show") 
end 

Tuy nhiên, spec vẫn bị lỗi. Nếu tôi loại bỏ các :protocol => 'https', spec cũng thất bại:

 
ActionController::RoutingError:  
    No route matches "/subscription" 

Trả lời

4

Giải pháp là chỉ đơn giản là bao gồm toàn bộ url giả, như vậy:

it "recognizes and generates #show" do 
    { :get => "https://test.host/subscription" }.should route_to(:controller => "subscriptions", :action => "show") 
end 

I figured it out từ this ticketthis changeset.

+4

Để làm việc này tôi phải chỉ định ràng buộc là '{protocol =>" https: // "}', không đơn giản là '" https "' như người ta có thể mong đợi. – cfeduke

-1

Tôi không chắc chắn, nhưng tôi nghĩ rằng các tuyến đường cần được khai báo như số nhiều - xem Rails Routing from the Outside In. Vì vậy, nó sẽ là

resources :subscriptions 

và trong spec

{:get => '/subscriptions', :protocol => 'https'} 

Hãy thử nếu mà không được :protocol. Nếu có, hãy bỏ qua thông số bằng HTTPS. Điều đó không nên được kiểm tra ở cấp độ đơn vị thử nghiệm, nhưng trong thử nghiệm tích hợp.

+1

Tôi đang sử dụng 'đăng ký' làm tài nguyên số ít. Xem phần 2.5 trong hướng dẫn bạn đã đề cập. –

+0

Xin lỗi, tôi không nghĩ về điều đó. Tôi đã thêm một câu trả lời khác. – awendt

-1

Liệu nó vượt qua nếu bạn thay đổi để spec này ?:

{:get => '/subscription'}.should_not route_to(:controller => …) 

Đó ít nhất sẽ cung cấp cho bạn sự tự tin rằng HTTP không được chuyển. (? Cung cấp tài liệu)

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