2011-12-07 2 views
1

I18n 모듈을 사용하여 Rails 애플리케이션에 대한 국제화 지원을 구현했습니다. 이제이 구현을 테스트하고 있습니다.assert_select가 실패 할 때 나머지 블록을 건너 뛰는 루비 레일

assert_select와 함께 기능 테스트를 사용하여 클래스 이름이 "translation_missing"인 스팬 HTML 요소가 없다는 것을 주장합니다.이 테스트는 정상적으로 작동합니다.

나는 config/locales 디렉토리에서 모든 로케일 파일을 가져 오는 도우미 메서드도 작성 했으므로 잘 작동합니다.

제 문제는 각 로케일을 반복하면서 누락 된 번역이 없는지 확인하려고 할 때입니다. 한 로케일에 대한 테스트가 실패하면 블록을 종료하고 실패를보고합니다. 테스트가 계속 실행되고 적용 가능한 경우 여러 실패 메시지를 출력하고 싶습니다. 테스트는 다음과 같습니다.

test "index page no missing translations" do 

    # Login as admin to avoid 302 errors 
    login_as(@user) 

    # Get a list of the locales 
    locales = get_locales() 

    # Check each locale for missing translations 
    locales.each do |locale| 
    get :index, :locale => locale 
    assert_select "span.translation_missing", false, "Broadcasts index page: Translations missing from #{locale}.yml" 

    end 
end 

블록이 종료되는 것을 막을 수있는 방법이 있습니까?

미리 감사드립니다.

+0

테스트의 요점은 작동하고있는 부분과 그렇지 않은 부분을 파악하는 것입니다. 나는 성가신 일이 있다는 것을 알지만, 시험은 한 가지를 시험해야합니다. 색인 페이지에서 정확할 것으로 예상되는 지역 주민이 몇 명 있다면 테스트에서 개별적으로 점검하십시오. 그렇게할만한 자동화 된 방법이 있는지 확실하지 않습니다. – agmcleod

+0

모든 로케일을 한꺼번에 검사하는 주된 이유는 미래에 추가 된 로케일이 자동으로 테스트 될 수 있도록하는 것이 었습니다. 미래의 유지 관리자는 테스트 자체를 작성할 수 없습니다. – warby

답변

4

예를 들어 메타 데이터를 다른 곳으로 메타 프로그램해야합니다. (테스트되지 않은)

get_locales.each do |locale| 
    test "index page translations #{locale}" do 
    # Login as admin to avoid 302 errors 
    login_as(@user) 
    get :index, :locale => locale 
    assert_select "span.translation_missing", false, "Broadcasts index page: Translations missing from #{locale}.yml" 
    end 
end 

이 같은 일이 각각은 하나의 로케일을 테스트하고 아무도 다른 사람의 결과를 엉망으로하지 않습니다, 여러 테스트를 작성 발생합니다.

관련 문제