2013-09-04 2 views
0

Я новичок в Capybara (используя 2.1.0), и я не могу получить его, чтобы заполнить некоторые поля в моем новом (Rails 4/Ruby 2) приложении. Поскольку это только что началось, приложение прост.Capybara не заполняет поля

Для моего пользователя # new, я заполняю одно поле, которое имеет валидацию, и оно сохраняет, когда оно действительно, и терпит неудачу, когда это не так. Отлично. У меня есть еще одна модель, и попробуйте сделать CoiReport # new, и она не работает.

Он продолжает терпеть неудачу с «Владелец не может быть пустым» (у него есть validate_presence_of validator), хотя если я сохраню__событие_страницы перед нажатием кнопки «Создать новое», поле заполняется. Поле является полем, поэтому я подумал, что это может быть это, но даже когда я изменил его на 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

Это не пахнет проблемой Капибары для меня. Можете ли вы попытаться отладить '@ coi_record' и проверить его состояние прямо перед строкой' @ coi_record.save' в вашем контроллере? – depa

+0

Добавлен

<% = p @coi_record%>

. Запуск спецификации я вижу два выхода, один для первого попадания на страницу, второй, когда он не может сохранить и повторно отображает страницу для редактирования. Во втором случае Owner == 1, как и должно, и который должен позволить ему пройти проверку. # #

ответ

0

OK Это была простая ошибка пилота с моей стороны. Депа был абсолютно прав, что это было не проблема Capybara. Проблема была в моем валидаторе. CoiRecord связан с пользователем Thusly:

belongs_to :owner, class_name: 'User' 

Я хотел, чтобы это было требуемое соотношение, поэтому у меня была проверка, в CoiRecord, как

validates_presence_of :owner 

, где он должен быть

validates_presence_of :owner_id 

Изменение, которое позволяет пройти тест. Ошибка новичков. Как неловко! Конечно, я смотрел на него 100 раз и не видел этого. Депа указал путь, так как я мог см. значение было установлено, поэтому мне пришлось задаться вопросом, почему валидация в любом случае потерпит неудачу ...?

Хотя было бы хорошо, если бы Rails заметили и сообщили о требовании поля, которого не существует ...?

+0

Это круто. Теперь вы можете принять свой собственный ответ, чтобы другие люди знали, что проблема решена. – depa

Смежные вопросы