Rspec 测试,水豚找不到 link 或按钮

Rspec testing, Capybara unable to find link or button

这是我的请求测试失败的部分:

scenario 'Admin destroys a job posting + gets notified' do
  parent = create(:parent)  
  create(:assignment, user_id: @user.id, role_id: 1)
  demand = create(:demand, shift_id: 4)
  sign_in(@user)
  visit demands_path

  click_on 'Destroy'
  expect(page).to have_content('successfully')
end

这是错误:

 Failure/Error: click_on 'Destroy'

 Capybara::ElementNotFound:
   Unable to find link or button "Destroy"

这里是对应的索引视图,在应用中包含一个"Destroy"link:

知道为什么这个测试失败了吗?

很可能您认为页面上的数据实际上不是。这可能有多种原因。

  1. 您的页面需要 JS 而您没有使用支持 JS 的驱动程序 - 请参阅 https://github.com/teamcapybara/capybara#drivers

  2. 你的sign_in方法定义为填写user/pass然后点击一个按钮,但是没有期望确认用户已经完成登录的内容结束。这可能会导致在登录完成之前发生以下访问,因此不会实际登录。通过检查 page.html 的结果或在单击之前调用 page.save_and_open_screenshot 来验证这一点。

  3. 您的 'Destroy' "button" 既不是实际的 元素也不是

  4. 来解决这个问题
  5. 您正在使用支持 JS 的驱动程序,但您的记录实际上对应用程序不可见 - 这会影响您的所有测试,所以我认为可能不是这个。如果是这种情况,登录将失败,您可能需要安装 database_cleaner 并配置为与 RSpec 和 Capybara - https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example

  6. 一起使用