我是Capybara的新手(使用2.1.0),我无法在全新的(Rails 4 / Ruby 2)应用程序中填写一些字段。由于它刚刚开始,应用程序很简单。
对于我的用户#new,我填写了一个有验证的字段,它在有效时保存,在没有时失败。大。我有另一个模型,并尝试做CoiReport #new,它不起作用。
它仍然失败,“所有者不能为空”(它有一个validate_presence_of验证器)即使如果我在click_button“创建新”之前我在save_and_open_page中填写了该字段。该字段是一个字段,所以我认为可能是它,但即使我将其更改为type =“text”,它仍然会失败。当我手工完成时它也可以工作。
所以这些都是非常简单的形式,但是一个有效,有一个没有,我想不出有什么区别!
以下是表格:
<%= form_for(@coi_record) do |f| %>
<% if @coi_record.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@coi_record.errors.count, "error") %> prohibited this coi_record from being saved:</h2>
<ul>
<% @coi_record.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :owner_id %><br>
<%= f.text_field :owner_id %>
</div>
<div class="field">
<%= f.label :signer_id %><br>
<%= f.text_field :signer_id %>
</div>
<div class="field">
<%= f.label :signed_at %><br>
<%= f.datetime_select :signed_at %>
</div>
<div class="field">
<%= f.label :is_current %><br>
<%= f.check_box :is_current %>
</div>
<div class="field">
<%= f.label :has_no_conflicts %><br>
<%= f.check_box :has_no_conflicts %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
这是测试:
require 'spec_helper'
describe 'test2' do
it "should work!" do
visit '/coi_records/new'
page.should have_content('New coi_record')
within '#new_coi_record' do
fill_in 'Owner', :with => '1'
check 'Is current'
check 'Has no conflicts'
click_button 'Create Coi record'
end
# save_and_open_page
page.should have_content('Coi record was successfully created.')
end
end
帮助!
答案 0 :(得分:0)
好的,这对我来说是一个简单的飞行员错误。 depa绝对正确,这是不一个水豚问题。问题出在我的验证器上。 CoiRecord与User相关联:
belongs_to :owner, class_name: 'User'
我希望这是一个必需的关系,所以我在CoiRecord中进行了验证
validates_presence_of :owner
应该在哪里
validates_presence_of :owner_id
更改它让测试通过。菜鸟错误。多么尴尬!当然,我看了100次,看不到它。 depa指出了方向,因为我可以看值正在设置,所以我不得不怀疑,为什么验证会失败...?
虽然如果Rails注意到并报告了一个不存在的字段的要求会很好......?