1

我有一个表单页面,其中包含电子邮件地址和密码的确认字段,两者都带有“确认”标签。正如预期的那样,使用 RSpec 运行时会失败。如果我使标签独一无二,例如将电子邮件标签更改为“电子邮件确认”,那么它将通过。我宁愿保持标签不变。如果我使用 form_for 生成的电子邮件 ID,Capybara 似乎很高兴,但测试失败。我也试过这个名字,结果相同。

RSpec/水豚提取物:

fill_in "company_contact_email_confirmation", with: "example@example.com"

form_for 提取:

<div class="field">
  <%= f.label :contact_email_confirmation, "Confirmation" %><br />
  <%= f.email_field :contact_email_confirmation %>
</div>

生成源:

<div class="field">
  <label for="company_contact_email_confirmation">Confirmation</label><br>
  <input id="company_contact_email_confirmation" name="company[contact_email_confirmation]" size="30" type="email">
</div>

错误信息:

1) 使用有效信息注册的公司页面应创建公司

 Failure/Error: expect { click_button submit }.to change(Company, :count).by (1)
   count should have been changed by 1, but was changed by 0

如果我使用 Capybara within,正如这里其他地方所建议的那样,它仍然不起作用:

RSpec/水豚提取物:

within ".email_stuff" do
  fill_in "Confirmation", with: "example@example.com"
end

form_for 提取:

<div class="email_stuff">
  <div class="field">
    <%= f.label :contact_email_confirmation, "Confirmation" %><br />
    <%= f.email_field :contact_email_confirmation %>
  </div>
</div>

生成源:

<div class="email_stuff">
  <div class="field">
    <label for="company_contact_email_confirmation">Confirmation</label><br />
    <input id="company_contact_email_confirmation" name="company[contact_email_confirmation]" size="30" type="email" />
  </div>
  </div>

Capybara 似乎没有抱怨,但测试失败并出现同样的错误。如何让 Capybara 允许我在同一个表单上使用同一个标签两次?

4

1 回答 1

0

我在 ActiveRecord after_validation 回调中添加了一些调试语句,以查看虚拟确认字段的状态。如上面的代码所示,我通过名称或 ID 引用了电子邮件确认字段,但没有同时引用密码确认和带有 ID 的电子邮件确认字段。Capybara 将密码数据放在错误的确认字段中,因为电子邮件确认字段首先出现在表单上。如果我将 ID 放在密码字段上,它就会起作用。两者上的 ID 都是最安全的。

于 2012-05-19T00:50:21.640 回答