2011-08-31 2 views
1

내가 밖으로 스텁 렌더링하고 싶습니다 테스트와 나는 특정 레이아웃이컨트롤러는 레이아웃을 렌더링하지 않고 레이아웃을 선택 그 레일 A가

보너스 캐치을 선택하는지 테스트하고 싶습니다 : 테스트 ENV에, 그 레이아웃 파일이 존재하지 않습니다

컨트롤러가 렌더링없이 레이아웃을 선택했는지, 그리고 ActionView :: MissingTemplate 오류를 트리거하지 않았는지 감지하는 영리한 방법이 있습니까?

(이는 레일 2.3 응용 프로그램에 있지만 레일 3 채팅 주시기) 도우미에서 레이아웃 선택 로직을 넣어

+0

중복? http://stackoverflow.com/questions/2622219/rails-layout-name-inside-view –

+0

싫다. : active_layout은 ActionView :: MissingTemplate을 던집니다. 덕분에 – whatbird

답변

1

이 작업을 수행하는 가장 쉬운 방법을 직접 도우미를 테스트합니다. 아무것도 밖으로 찌르거나 렌더링을 위조 할 필요가 없습니다.

class MyController < ActionController::Base 
    layout :choose_layout 

private 
    def choose_layout 
    if some_thing? 
     'this_layout' 
    else 
     'other_layout' 
    end 
    end 
end 

class MyControllerTest < ActionController::TestCase 
    test "choose_layout" do 
    @controller.stubs(:some_thing? => true) 
    assert_equal 'other_layout', @controller.send(:choose_layout) 
    end 
end 
+1

. 그런 개인적인 방법을 테스트하는 것에 대한 혐오감이 있지만,이 경우에해야 할 일이있는 것처럼 보입니다. – whatbird

+1

개인 메서드를 호출하면 문제가 발생하므로 해당 기능을 도우미 클래스에 캡슐화하고이를 단위 테스트로 테스트 할 수 있습니다. 논리를 하나의 책임 코드로 분리하여 테스트합니다. 이것이 메타 답변입니다. – Winfield