Ruby on Rails:无法选中 RSpec 测试中的复选框
Ruby on Rails: Cannot check the checkbox in RSpec test
我正在 Rails Ruby 中测试我的代码,但无法在复选框中放置复选标记,不知道为什么。我正在使用 RSpec.
在测试代码中,我设置在与任务模型关联的复选框中打勾,但出现错误。
・我确认 'checkbox' 出现在错误页面截图中。
・我收到 'ElementNotFound' 消息,无法勾选(错误详情如下)
以下是我与此问题相关的代码。
有人可以帮忙吗?谢谢。
#app/views/tasks/_form.html.erb
<% Label.all.each do |label| %>
<%= form.check_box :label_ids, { multiple: true, checked: label[:checked], disabled: label[:disabled], include_hidden: false }, label[:id] %>
<%= label.name %>
<% end %>
#spec/system/task_spec.rb
describe 'Checking Labels' do
before do
FactoryBot.create(:label)
end
context 'When I select Label' do
it 'Selected label appears in the show page' do
visit new_task_path
fill_in 'task_task_name', with: 'TEST'
check "label1"
click_on 'Go'
click_on 'Detail'
expect(page).to have_content "label1"
end
end
end
#factoryBot
FactoryBot.define do
factory :label do
name { "label1" }
end
end
#Error message
Failure/Error: check "label1"
Capybara::ElementNotFound:
Unable to find checkbox "label1" that is not disabled
显示 erb
不是很有用,因为在没有更多信息的情况下它实际上并没有完全定义 HTML 是什么,所以以后请始终提供实际的 HTML 在你的测试中产生。
这对您不起作用的原因是您试图根据标签名称进行点击,但该名称与复选框没有任何关联。如果您查看页面的实际 HTML,您会发现没有带有 for
属性的标签元素将其链接到您的复选框,并且单击文本不会按应有的方式切换复选框.
您可能想要查看 collection_check_boxes
方法,或者在表单生成器上使用
之类的方法手动使用 label
方法
<% Label.all.each do |label| %>
<%= form.check_box :label_ids, { multiple: true, checked: label[:checked], disabled: label[:disabled], include_hidden: false }, label[:id] %>
<%= form.label :label_ids, label.name, value: label[:id] %>
<% end %>
which should create a label element associated with the check box and allow you to find the element by the label text, so `check 'label1'` will work.
我正在 Rails Ruby 中测试我的代码,但无法在复选框中放置复选标记,不知道为什么。我正在使用 RSpec.
在测试代码中,我设置在与任务模型关联的复选框中打勾,但出现错误。
・我确认 'checkbox' 出现在错误页面截图中。 ・我收到 'ElementNotFound' 消息,无法勾选(错误详情如下)
以下是我与此问题相关的代码。
有人可以帮忙吗?谢谢。
#app/views/tasks/_form.html.erb
<% Label.all.each do |label| %>
<%= form.check_box :label_ids, { multiple: true, checked: label[:checked], disabled: label[:disabled], include_hidden: false }, label[:id] %>
<%= label.name %>
<% end %>
#spec/system/task_spec.rb
describe 'Checking Labels' do
before do
FactoryBot.create(:label)
end
context 'When I select Label' do
it 'Selected label appears in the show page' do
visit new_task_path
fill_in 'task_task_name', with: 'TEST'
check "label1"
click_on 'Go'
click_on 'Detail'
expect(page).to have_content "label1"
end
end
end
#factoryBot
FactoryBot.define do
factory :label do
name { "label1" }
end
end
#Error message
Failure/Error: check "label1"
Capybara::ElementNotFound:
Unable to find checkbox "label1" that is not disabled
显示 erb
不是很有用,因为在没有更多信息的情况下它实际上并没有完全定义 HTML 是什么,所以以后请始终提供实际的 HTML 在你的测试中产生。
这对您不起作用的原因是您试图根据标签名称进行点击,但该名称与复选框没有任何关联。如果您查看页面的实际 HTML,您会发现没有带有 for
属性的标签元素将其链接到您的复选框,并且单击文本不会按应有的方式切换复选框.
您可能想要查看 collection_check_boxes
方法,或者在表单生成器上使用
label
方法
<% Label.all.each do |label| %>
<%= form.check_box :label_ids, { multiple: true, checked: label[:checked], disabled: label[:disabled], include_hidden: false }, label[:id] %>
<%= form.label :label_ids, label.name, value: label[:id] %>
<% end %>
which should create a label element associated with the check box and allow you to find the element by the label text, so `check 'label1'` will work.