如何拥有一个与显示名称具有不同参数值的字段

How to have a field that has a different params value to the displayed name

我有一个收集电子邮件地址的表格。

  <%= form_tag accounts_path, :method => :post do %>
    <div class="field">
      <%= label_tag :email %><br />
      <%= text_field_tag :homeEmail %>
    </div>
    <div class="Section-button">
      <div class="actions">
        <%= submit_tag "Update", class: 'btn btn-primary' %>
      </div>
    </div>
  <% end %>

我将电子邮件的字段标记设置为 :homeEmail,因为我想使用 params[:homeEmail] 在控制器中恢复它。

我想使用水豚功能规格测试,例如

  fill_in 'Email', with: user.email, match: :first
  click_button Update

但我收到错误消息:

Unable to find visible field "Email" that is not disabled within #<Capybara::Node::Element

该元素未被禁用,当我在开发模式下尝试该页面时它可以正常工作。如果我只是将 text_field_tag 更改为

,测试将填写该字段
<%= text_field_tag :email %>

但这在控制器中不起作用,因为参数是 params[:email] 而不是 params[:homeEmail]。

我如何让这个测试工作?

而不是做:

  fill_in 'Email', with: user.email, match: :first

你应该这样做:

  fill_in 'homeEmail', with: user.email, match: :first

由于水豚尝试查找具有 id 或 name 属性的元素,如果您正在执行 <%= text_field_tag :homeEmail %> 它将生成 <input type="text" name="homeEmail" id="homeEmail"> 但是在填充它时您使用 Email 作为水豚找不到任何元素的选择器。

如果有帮助请告诉我!

fill_in 查找要由 nameid 或相关标签文本填充的元素。当您执行 fill_in 'Email', ... 时,我假设您打算使用关联的标签文本选项。您遇到的问题是标签实际上并未与该字段相关联(如果您查看 HTML 来源,您会看到标签 for 属性与输入 id 属性)。解决方法是更改​​您的视图以将标签与字段正确关联

<%= form_tag accounts_path, :method => :post do %>
  <div class="field">
    <%= label_tag :homeEmail, 'Email' %><br />
    <%= text_field_tag :homeEmail %>
  </div>
  ...

那么您的 fill_in 'Email', with: user.email 应该可以正常工作