2014-06-10 1 views
0

4 응용 프로그램 내 국제화 라벨을 인식하지 못하는 설정/로케일/뷰/show_user 내용/en.yml :RSpec에 다음과 같이 내 로케일을 지정한 내 레일에서

en: 
    activerecord: 
    attributes: 
     user: 
     first_name: First name 
     last_name: Last name 
     ... 
    layouts: 
    header: 
     home: "Home" 
     help: "Help" 
     ... 
    footer: 
     about: "About" 
     contact: "Contact" 
    users: 
    new: 
     signup: "Sign up!" 
     create_my_account: "Create my account" 

내가 실행 내 응용 프로그램을 내 localhost에 저장하면 모든 레이블이 올바르게 표시됩니다. 내 부분을 다음과 같이 변경을 할 때, 내 RSpec에 테스트,

describe "with valid information" do 
    before do 
    fill_in "First name", with: "Jenny" 
    fill_in "Last name", with: "Johnson" 

<%= f.label t :first_name, scope: [:activerecord, :attributes, :user] %> 
<% # f.label :first_name %> 
<%= f.text_field :first_name %> 
<%= f.label :last_name %> 
<%= f.text_field :last_name %> 

내 RSpec에 테스트 표시 /views/users/_fields.html.erb이 실패를 실패

1) User pages signup with valid information should create a user 
    Failure/Error: fill_in "First name", with: "Jenny" 
    Capybara::ElementNotFound: 
    Unable to find field "First name" 
    # ./spec/requests/user_pages_spec.rb:88:in `block (4 levels) in <top (required)>' 

나는 내 양식의 생성 된 HTML은 FIRST_NAME에 대해 다른 ID를 표시 것으로 나타났습니다,하지만이 중요 나도 몰라 :

<label for="user_First name">First name</label> 
<input id="user_first_name" name="user[first_name]" type="text" /> 
<label for="user_last_name">Last name</label> 
<input id="user_last_name" name="user[last_name]" type="text" /> 

다음 질문에 대한 답입니다. 왜 내 페이지가 내 브라우저에서 올바르게 표시되는 동안 Capybara가 내 레이블 : first_name을 (를) 찾을 수 없습니까?

답변

0

중요합니다. 해당 ID와 텍스트 필드 (또는 이와 유사한 입력)이있는 경우 텍스트를 포함하는 라벨이있는 경우 다음 해당 필드

  • 를 사용합니다

    • : 카피 바라 하나 여러 가지 방법으로 fill_in에 로케이터 인수를 사용 , 그 라벨을위한 필드를 사용할 것입니다.

    두 번째 경우이므로 capybara는 라벨의 for 속성을 사용하여 텍스트 필드를 찾습니다. 라벨의 for가 user_First name이지만 텍스트 필드의 ID는 user_first_name이므로이 방법은 작동하지 않습니다.

    기본적으로 레일스는 첫 번째 인수로 전달한 값에서 레이블 텍스트와 for 속성을 모두 가져 오므로 첫 번째 인수로 속성 이름을 전달한 다음 두 번째 인수로 사람이 읽을 수있는 번역을 전달해야합니다

    f.label :first_name, t(:first_name, scope: [:activerecord, :attributes, :user]) 
    

    설명서를 읽으면이 트랜잭션을 찾는 것이 실제로 기본값이 될 것이므로 전혀 지정하지 않아도됩니다.

  • 관련 문제