Ruby on Rails Capybara::Ambiguous: Ambiguous match
我对Rails还是很陌生,并且仍然在学习它。现在,我收到了这样的测试失败消息:
1 2 3 4 5 | 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)>' |
因为我的主页上有两个相同的"帮助"链接,但是测试似乎认为这是一个模棱两可的匹配项,我希望它以相同的方式测试它们,因为链接直接指向同一页面。
实际上,网站上有几种解决方案,但是由于我是新手,所以大多数解决方案对我来说都很复杂,所以有人可以给我最简单的解决方案吗?预先感谢。
已更新:
我的观点和规格没有什么复杂的。我仍在学习所有内容。
这是我的规格
1 2 3 4 5 6 7 8 | 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") |
这是我的页眉部分在布局中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <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> |
这是我的页脚部分在布局中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <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> |
请注意,在两个部分中有两个独立的帮助链接,它们是相同的。
您可能想尝试以下任一方法
click_link("Help", :match => :first)
click_link("Help", :match => :smart)
click_link("Help", :match => :prefer_exact)
click_link("Help", :match => :one)
希望这会有所帮助。
要做的是通过指定周围的元素来澄清要单击的帮助按钮,从而使规格更加具体。仅当它们位于不同元素中时,此方法有效
基于您发布的html ...根据您要测试的链接,将click_link(" Help)替换为以下内容之一(在页眉或页脚中)
1 2 3 | within("header") do click_link"Help" end |
或
1 2 3 | within("footer") do click_link"Help" end |
或查看此解决方案->水豚歧义度解决方案