RSpec无法识别我的国际化标签

时间:2014-06-10 06:43:04

标签: ruby-on-rails rspec capybara

在我的Rails 4应用程序中,我已经指定了我的语言环境,如下所示:     配置/区域设置/查看/ show_user / en.yml 内容:

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"
当我对我的部分内容进行以下更改时

失败,/ views / users / _ fields.html.erb

<%= 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测试显示此失败:

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,而我的页面在浏览器中显示正确?

1 个答案:

答案 0 :(得分:0)

这很重要。 Capybara以几种方式使用fill_in的定位器参数:

  • 如果存在具有该ID的文本字段(或类似输入),则它将使用该字段
  • 如果有包含该文本的标签,则它将使用标记为。
  • 的字段

你是第二种情况,因此水豚使用标签上的for属性来查找文本字段。这不起作用,因为标签的格式为user_First name,但文本字段的ID为user_first_name

默认情况下,rails从您作为第一个参数传递的值派生标签文本和标签的for属性,因此您应该将属性名称作为第一个参数传递,然后将人类可读的翻译作为第二个参数传递< / p>

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

我对文档的阅读是,查找此事务实际上是默认情况 - 您可能根本不需要指定它。