我的部分请求测试失败了:
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"
这是相应的索引视图,包括应用程序中的“销毁”链接:
知道为什么这个测试失败了吗?
答案 0 :(得分:2)
赔率是您假设在页面上的数据实际上不是。这可能有很多原因。
您的网页需要JS而您没有使用支持JS的驱动程序 - 请参阅https://github.com/teamcapybara/capybara#drivers
您的sign_in
方法被定义为填写用户/通行证然后单击按钮,但不会期望确认用户已在最后完成登录的内容。这可能导致在登录完成之前进行以下访问,因此实际上并未登录。通过在点击之前检查page.html
的结果或致电page.save_and_open_screenshot
来验证。
您的“销毁”“按钮”既不是实际的< a>元素或< button>元件。通过使用语义标记或交换到find(...).click
您正在使用支持JS的驱动程序,但您的记录实际上对应用程序不可见 - 这会影响您的所有测试,但我认为它可能不是这样。如果是这种情况,登录将失败,您可能需要安装database_cleaner并配置为与RSpec& Capybara - https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example