我有一个表单页面,其中包含电子邮件地址和密码的确认字段,两者都带有“确认”标签。按预期运行RSpec时失败。如果我将标签设为唯一,例如将电子邮件标签更改为“电子邮件确认”,则会通过。我宁愿保持标签相同。如果我使用form_for生成的电子邮件ID,Capybara似乎很高兴,但测试失败了。我也尝试过同样的结果。
RSpec / Capybara提取物:
fill_in "company_contact_email_confirmation", with: "example@example.com"
form_for extract:
<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 / Capybara提取物:
within ".email_stuff" do
fill_in "Confirmation", with: "example@example.com"
end
form_for extract:
<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允许我在同一表格上使用相同的标签两次?
答案 0 :(得分:0)
我在ActiveRecord after_validation回调中添加了一些调试语句,以查看虚拟确认字段的状态。如上面的代码所示,我通过名称或ID引用了电子邮件确认字段,但未使用ID识别密码确认和电子邮件确认字段。 Capybara将密码数据放在错误的确认字段中,因为电子邮件确认字段首先在表单上。如果我将ID放在密码字段上,那就可以了。两者的ID都是最安全的。