2013-08-07 21 views
9

Tôi tò mò những gì mọi người xem xét thử nghiệm đầy đủ/toàn diện các tuyến đường. Một anh chàng tôi làm việc với dường như muốn khẳng định mọi tuyến đường trong tệp tuyến đường của chúng tôi, bất kể tiêu chuẩn như thế nào. Tôi cảm thấy như đây là một sự lãng phí thời gian, nhưng có lẽ tôi sai và có một số giá trị cho điều này tôi không biết.Điều gì cần kiểm tra trong định tuyến Rails?

Có một vài trường hợp tôi có thể thấy một số giá trị trong định tuyến. Chúng tôi vẫn có một vài hành động phản hồi cả hai yêu cầu GET và POST, mặc dù tôi đã có ý nghĩa để loại bỏ những yêu cầu đó. Chúng ta không có bất kỳ sự ràng buộc điên rồ nào với lambdas hay bất cứ thứ gì, nhưng điều đó có vẻ như nó sẽ đáng thử nếu chúng ta làm vậy.

Nhưng đối với định nghĩa tài nguyên thông thường?

resources :foo, only: [:index, :show] 

Chúng tôi xác nhận rằng cả hai tuyến này đều tồn tại, chúng tôi khẳng định rằng chúng là GET và chúng đi đến bộ điều khiển/hành động chính xác. Có bất kỳ điểm nào trong số đó không? Có vẻ như chúng tôi chỉ đang thử nghiệm Rails vào thời điểm này.

Trên một câu hỏi có liên quan một chút, tôi muốn có các tuyến tài nguyên được xác định giống như trên (với phần only: [:index, :show]). Có bất kỳ hậu quả nào để chỉ xác định resources :foo trong tệp tuyến nếu chỉ có chỉ mục/hiển thị hành động trên bộ điều khiển đó không?

Dường như với tôi rằng nó có thể chỉ sử dụng nhiều thời gian và/hoặc bộ nhớ hơn, nhưng có phải nó cũng là một mối quan tâm về bảo mật hoặc điều gì đó thực sự tồi tệ mà tôi không biết?

+1

Một cách để xem xét là bạn đang thử nghiệm/foo/index và/foo /: id để tránh vô tình làm hỏng tệp tuyến mà không nhận ra ... Ai * không * vô tình tất cả mọi thứ? –

+0

Bạn cũng nên khẳng định rằng true == true ... – KimJongIl

+0

@bratsche FYI: Tôi phải tìm một giải pháp cho [thử nghiệm các tuyến chưa được chỉ định] (http://stackoverflow.com/questions/18357389/how-to-test-a -controller-action-that-does-không-tồn tại), quá. – JJD

Trả lời

5

Lý do lớn nhất để kiểm tra tuyến đường không phải là kiểm tra kép Rails, mà là để xác minh API công khai.

Điều này làm giảm hồi quy dựa vào các điểm nhập được quảng cáo bất kể dữ liệu nào họ lấy hoặc trả lại.

Điều gì cấp để kiểm tra những điều này cũng mở cho một số cuộc tranh luận; là nó có giá trị để kiểm tra các tuyến đường chính nó, hoặc nó chỉ có ý nghĩa để cũng xác minh dữ liệu đi vào/sắp ra? Làm như vậy cũng kiểm tra các tuyến đường giống nhau và tôi cho rằng giá trị này là – có giá trị hơn nhưng chậm hơn.

Tôi có xu hướng tuyến đường thử nghiệm chỉ trực tiếp khi:

  • Họ là một chút sôi nổi, ví dụ, các tuyến đường không bog tiêu chuẩn
  • tôi phải từ chối một số tuyến
  • Trong phát triển ban đầu.

Kiểm tra tuyến đường sơ bộ thường bị xóa khi chúng được thử nghiệm theo những cách khác.

+0

Bạn có thể giải thích điểm thứ hai, khi bạn phải từ chối một số tuyến đường? Bạn có nghĩa là bạn đang kiểm tra một cách rõ ràng rằng một tuyến đường nhất định không tồn tại? – bratsche

+0

@bratsche Đúng. –

+0

API đối mặt công khai là gì? – JohnOsborne

4

Tôi kiểm tra tuyến đường để đảm bảo rằng các tuyến đường tôi muốn cho phép mở nhưng cũng vì vậy các tuyến đường mà tôi muốn tắt không hoạt động. Tôi chia thông số định tuyến thành ba ngữ cảnh - các tuyến được phép, các tuyến đường không được phép và các tuyến tùy chỉnh.

ví dụ: sử dụng rspec

describe SessionsController do 
    describe "routing" do 
    context "permitted" do 
     it "routes to #create" do 

     expect(post "sessions").to route_to("sessions#create") 

     end 
     ... 
    end 
    context "custom routes" do 
     it "routes 'login' to #new" do 

     expect(get "/login").to route_to("sessions#new") 

     end 
     ... 
    end 
    context "invalid routes" do 
     it "does not route to #edit" do 

     expect(get "/sessions/edit").not_to be_routable 

     end 
     ... 
    end 
    end 
end 
+1

Bạn có thể giải thích mục đích của ngữ cảnh "tuyến đường không hợp lệ" thứ ba không? Đây là phần thứ hai của câu hỏi của tôi, có phần liên quan. Nhưng nếu bạn có "tài nguyên: phiên" (và bạn không bao gồm mệnh đề 'duy nhất'), và bạn cũng không có phương thức sửa đổi SessionsController # .. điều gì sẽ xảy ra? Tôi không bao giờ làm điều này, nhưng tôi chỉ tò mò nếu có bất kỳ vấn đề lớn (như an ninh) phát sinh. – bratsche

+2

Mục đích, cho tôi dù sao, là để đảm bảo tôi đã không để lại bất kỳ tuyến đường mở mà tôi đã không có kế hoạch. Tôi nghĩ tốt nhất là tránh phơi bày bất kỳ đường dẫn nào thông qua ứng dụng mà tôi chưa mở một cách rõ ràng. Khi tôi đang làm TDD, tôi chỉ bao gồm các tuyến đường (sử dụng: chỉ) mà tôi đang viết mã phía sau. Do đó, tôi muốn bất kỳ tuyến đường nào khác bị chặn và tôi muốn thử nghiệm của mình cho tôi biết đây là trường hợp. Điều đó cũng có nghĩa là tôi không thể vô tình thực hiện các thay đổi đối với tệp tuyến đường mà không làm hỏng kiểm tra. Một ví dụ tốt hơn sẽ là người dùng # index không nên định tuyến, nơi tôi không muốn nó tiếp xúc. –

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