RSpec和Capybara的Rails测试无法在application.html.erb中找到链接

时间:2018-02-10 19:03:51

标签: ruby-on-rails rspec capybara

我正在使用RSpec和Capybara为我的Rails应用程序编写功能测试,并且我的测试失败并显示错误消息:

type(output) #str

我的规范写成:

Failure/Error: click_link "Google"

     Capybara::ElementNotFound:
       Unable to find visible link "Google"

我的Google登录link_to位于我的application.html.erb布局中:

 it "lists logged in user's profile data" do
      visit '/'
      mock_auth_hash
      click_link "Google"
      click_link "User"
      expect(page).to have_content('mockuser')
    end 

当我使用相同的link_to并将其放入我的根页时,测试通过没有问题。似乎Capybara很可能没有在我的application.html.erb布局中获取HTML。我不确定如何解决这个问题,而Capybara的文档并没有说明任何解决方案。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

Capybara不太可能只是忽略了你页面的某些部分,更有可能的是你的应用程序在渲染你的页面时实际上并没有正确地呈现那个布局(可能是因为你在链接中呈现了一个链接 - 这是非法的html https://www.w3.org/TR/html52/textlevel-semantics.html#the-a-element - 由于某种原因??)。在visit之后休眠几秒钟然后如果您使用的驱动程序支持屏幕截图 - 如果不使用save_and_open_page,请选择一个,然后检查HTML以查看页面上的实际内容。

visit('/')
sleep 3
save_and_open_screenshot # If the driver supports screenshots
# save_and_open_page # To look at the actual HTML

你可能会发现该页面确实没有该链接。