在我的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,而我的页面在浏览器中显示正确?
答案 0 :(得分:0)
这很重要。 Capybara以几种方式使用fill_in
的定位器参数:
你是第二种情况,因此水豚使用标签上的for
属性来查找文本字段。这不起作用,因为标签的格式为user_First name
,但文本字段的ID为user_first_name
。
默认情况下,rails从您作为第一个参数传递的值派生标签文本和标签的for属性,因此您应该将属性名称作为第一个参数传递,然后将人类可读的翻译作为第二个参数传递< / p>
f.label :first_name, t(:first_name, scope: [:activerecord, :attributes, :user])
我对文档的阅读是,查找此事务实际上是默认情况 - 您可能根本不需要指定它。