2012-07-03 1 views
0

난 레일 3 응용 프로그램을 가지고 있고 모든 라우팅에 대한 테스트를 작성하려고합니다. 제약 조건이있는 레일스 경로의 기능 테스트를 수행하는 방법은 무엇입니까?

이 매우 간단한 경로를 상상해

resources :jobs, :constraints => {:id => /\d+/} 

내가 지금 이것을 테스트하고 싶습니다.

assert_routing "jobs/4", { :controller => "jobs", :action => "show", :id => "4" } 

부정을 주장하는 가장 좋은 방법은 무엇입니까 : 내 기능 시험, 그것은 긍정적 인 경우에 레일에 built-in assertions를 사용하여 주장을 작성하는만큼 쉽다? 즉, 제약 조건에 실패한 "jobs/wibble"이 라우팅되지 않고 오히려 오류를 반환합니까? "assert_not_routing"또는 이와 유사한 것을 구현하는 쉬운 방법이 있습니까? 전에 이걸 누가 취급 했나요?

답변

0

경로에 대해 아무 경로도 지정하지 않으셨습니까?

+0

나는 그랬지만 작동하지 않습니다. 솔루션을 찾았습니다. –

1

마지막으로 발견 한 해결책은 기능 테스트에서 유효한 URL의 라우팅을 테스트하고 통합 테스트에서 유효하지 않은 URL의 라우팅을 테스트하는 것입니다.

RoutesTest라는 새로운 통합 테스트 클래스를 만들었으며 거기에 아무 곳이나 라우팅하면 안되는 모든 URL이 저장됩니다.

require 'test_helper' 

class RoutesTest < ActionDispatch::IntegrationTest 
    test "broken routes don't work" do 
    assert_raise(ActionController::RoutingError) { 
     get "/jobs/wibble" 
    } 
    end 
end 

나는 여전히 기능 테스트에서 유효한 경로를 테스트합니다. 일부 테스팅 신학은 여기에서 실패합니다. 대부분의 경우 : 임의적이고 우스꽝스런 이론에서 우리는 특정 테스트가 통합 대 기능적 아이디어 대 부분에서 이루어져야하는지에 관해 생각해 봅니다. 다소 이상하게 보입니다. 하지만 나는 사람들과 신학을 테스트하는 것보다 오히려 일을 끝내기를 원합니다. 그래서 이것이 제가하는 방법입니다.

+0

Tom - rspec을 사용하지 않는 테스트 신학 적 이유가 있습니까? https://www.relishapp.com/rspec/rspec-rails/v/2-4/docs/routing-specs/be-routable-matcher. 아니면 네가하는 일을하지 않는거야? (should_not be_routable) –

+0

내가 RSpec을 사용하지 않는 주된 이유는 게으름이며, 오이가 과거 Rails 2.x 응용 프로그램으로 인한 혼란을 야기한 나쁜 경험이기도합니다. 아마도 RSpec으로 전환해야 할 것입니다. –

+0

그렇다면 "올바른"답변으로 투표 할 것이며 "이제는 rspec을 사용하는 것"에 대한 추가 된 육즙 부록을 함께 제공합니다! –