Rails 4.2 - 为什么assert_select失败?

时间:2015-05-12 18:19:11

标签: ruby-on-rails ruby

Mozilla将页脚中的about链接呈现为href =" localhost:3000 / about"什么时候应该渲染为href =" / about",但是当我使用chrome时这不会发生。

任何帮助解决我的测试失败原因的帮助都很棒。

试验:

test "layout links" do
  get root_path
  assert_template 'static_pages/home'
  assert_select "a[href=?]", root_path, count: 2
  assert_select "a[href=?]", help_path
  assert_select "a[href=?]", about_path #failing
  assert_select "a[href=?]", contact_path
end

捆绑执行rake test"之后

Expected at least 1 element matching "a[href="/about"]", found 0..
Expected 0 to be >= 1.

相关路线.rb:

root             'static_pages#home'
get 'help'    => 'static_pages#help'
get 'about'   => 'static_pages#about'
get 'contact' => 'static_pages#contact'

查看调用link_to:

<li><%= link_to 'About', about_path %></li> 

注意:这是唯一的失败测试,​​但是当我注释掉这个测试时,接触测试失败了。

编辑:

以下是我的观点:

home.html.erb

<!DOCTYPE html>
<div class="center jumbotron">
<h1>Sample App</h1>

<p>This is the home page for the railtutorial.org book, ch 3</p>
<%= link_to "Sign up now!", signup_path, class: "btn btn-lg btn-primary" %>
</div>
<%= link_to image_tag("rails.png", alt: "Rails logo"), 'http://rubyonrails.org/' %>
</html>

application.html.erb

<!DOCTYPE html>
<html>
<head>
    <title><%= full_title(yield(:title)) %></title>
    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
    <%= csrf_meta_tags %>
    <%= render 'layouts/shim' %>
</head>
<body>
    <%= render 'layouts/header' %>
    <div class="container">
        <%= yield %>
        <%= render 'layouts/footer' %>
    </div>
</body>

相关的_footer视图,错误:

<footer class="footer">
<small>
The <a href="http://www.railstutorial.org/">Ruby on Rails Tutorial</a>
by <a href="http://www.michaelhartl.com/">Michael Hartl</a>
</small>
<nav>
<ul>
  <li><%= link_to 'About', about_path %></li>
  <li><%= link_to "Contact", contact_path %></li>
  <li><a href="http://news.railstutorial.org/">News</a></li>
</ul>
</nav>
</footer>

2 个答案:

答案 0 :(得分:4)

也许您在视图中使用about_url而不是about_path

如果没有,那么在你的测试中添加这一行(在失败的行上方):

puts assert_select 'a[href]'

这将打印您视图中的所有<a href代码,您应该能够看到大约一个,并了解网址为何不符合预期。

答案 1 :(得分:1)

尝试使用about_url而不是about_path。您似乎在模板中使用了about_url帮助程序,该模板会返回完整的网址,因此测试期望找到完整网址(&#39; wwww.yoursite.com/about'),没有关系网址(&# 39; /左右/&#39)