Снимите флажок только не работать с тестами rspec / capybara
У меня есть вложенная форма, которая имеет 4 флажка. В настоящее время все работает в браузере, но я не могу заставить тесты capybara снять флажок и сохранить.
Использование Rails 4.2.2 и последних версий capaybara-webkit и rspec
Настройки.формат html.erb
<%= f.fields_for :preferences do |f| %>
<div class="email-notifications-holder">
<div class="email-holder">
<%= f.label :new_match, "Getting a new match each week" %>
<%= f.check_box :new_match, class: "checkbox new_match_email" %>
</div>
<div class="email-holder">
<%= f.label :match_reminder, "New matches Thursday reminder", class: "match_reminder_email" %>
<%= f.check_box :match_reminder, default: true, class: "checkbox" %>
</div>
<div class="email-holder">
<%= f.label :accepted_match, "A Glassbreakers accepted a match", class: "accepted_match_email" %>
<%= f.check_box :accepted_match, default: true, class: "checkbox" %>
</div>
<div class="email-holder">
<%= f.label :new_message, "Received a new message", class: "new_message_email" %>
<%= f.check_box :new_message, default: true, class: "checkbox" %>
</div>
</div>
<% end %>
Edit_account_spec.rb
it "allows the user to opt out of new match email", :js do
user = create(:user)
preferences = create(:preference, user: user)
sign_in(user)
visit edit_user_path(user)
click_tab(t("edit_user.tabs.settings"))
find(:css, "#user_preferences_attributes_0_new_match").set(false)
within "#button-container" do
page.find('.save.main-save-button-edit').trigger('click')
end
visit edit_user_path(user)
click_tab(t("edit_user.tabs.settings"))
user.preferences.reload
new_match_email_checkbox = find(".new_match_email")
expect(new_match_email_checkbox.checked?).to be_falsey
end
Я пробовал щелкнуть его, снять галочку, проверить его, вызвать щелчок, обернуть его вокруг внутреннего блока, перезагрузить БД и т. д.
new_match_email_checkbox = find(".new_match_email")
within(".email-notifications-holder") do
page.uncheck('Getting a new match each week')
end
new_match_email_checkbox.set(false)
2 ответа:
Прямо сейчас, когда вы сохраняете Профиль пользователя, у вас должны быть сохраненные навыки на борту, иначе он выдаст сообщение об ошибке, когда вы пытаетесь нажать кнопку Сохранить.
Часть пользовательского контроллера
def update if update_current_user?(user_params) redirect_to user_path(current_user) else flash["notice"] = "Please choose 3 industries, fields and years of experience." redirect_to edit_user_path(current_user) end end private def update_current_user?(update_params) skills_chosen?(update_params[:user_onboard_skills_attributes]) && current_user.update(update_params) end
Используя save_and_open_page, предупреждение об ошибке не появлялось, поэтому было неясно, что происходит. Я смог отладить это, отслеживая журналы во время выполнения тестов с помощью:
tail -f log/test.log
Просто используя это, снимите флажок
Но затем вы должны захватить элемент, чтобы проверить его.within(".email-notifications-holder") do page.uncheck('Getting a new match each week') end
new_match_email_checkbox = find(".new_match_email") expect(new_match_email_checkbox.checked?).to be_falsey
Примечание: Одно мне непонятно. Вы пытаетесь заставить эту линию работать?:
find(:css, "#user_preferences_attributes_0_new_match").set(false)
Или вы пытаетесь снять флажок после вызова
user.preferences.reload
?