Ruby on Rails Capybara ::不明确:模糊匹配

时间:2014-08-17 03:25:31

标签: ruby-on-rails capybara rspec-rails

我对铁杆很新,还在学习它。现在我得到了这样的测试失败消息:

1) LayoutLinks should have the right links on the layout
 Failure/Error: click_link("Help")
 Capybara::Ambiguous:
   Ambiguous match, found 2 elements matching link "Help"
 # ./spec/requests/layout_links_spec.rb:47:in `block (2 levels) in <top (required)>'

因为我有两个相同的&#34;帮助&#34;我的主页上的链接,但似乎测试认为它是一个模糊的匹配,我希望它以相同的方式测试它们,因为链接指向同一页面。

实际上网站上有几种解决方案,但大多数解决方案对我来说都很复杂,因为我很新,所以有人能给我最简单的解决方案吗?提前谢谢。

更新:

在我的观点和规范中,没有什么复杂的。我还在学习所有东西。

这是我的规格

        visit root_path
        expect(page).to have_title("Home")      
        click_link("About")
        expect(page).to have_title("About")
        click_link("Contact")
        expect(page).to have_title("Contact")
        click_link("Help")
        expect(page).to have_title("Help")

这是我的标题部分在布局

<header>
  <nav class="round">
    <ul>
        <li><%= link_to "Home", root_path %></li>
        <li><%= link_to "Help", help_path %></li>
        <li><%= link_to "Sign in", "#" %></li>
    </ul>
  </nav>
</header>

这是我的页脚在布局中的部分内容

<footer>
  <nav class="round">
    <ul>
        <li><%= link_to "About", about_path %></li>
        <li><%= link_to "Contact", contact_path %></li>
        <li><%= link_to "Help", help_path %></li>
    </ul>
  </nav>
</footer>

请注意,两个部分中有两个sepearte帮助链接,它们是相同的。

2 个答案:

答案 0 :(得分:6)

您可能想尝试其中一个

  

click_link(“帮助”,:匹配=&gt;:首先)
  click_link(“帮助”,:匹配=&gt;:智能)
  click_link(“帮助”,:match =&gt;:prefer_exact)
  click_link(“帮助”,:匹配=&gt;:一个)

希望这有帮助。

答案 1 :(得分:5)

通过命名周围的元素,通过明确指示单击哪个帮助按钮,可以使规范更具体。这仅在它们位于不同元素

内时才有效

基于您发布的html ...我会根据您要测试的链接替换click_link(“帮助”)。(在页眉或页脚中)

    within("header") do
        click_link "Help"
    end

    within("footer") do
        click_link "Help"
    end

或查看此解决方案 - &gt; Capybara Ambiguity Resolution