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.