2015-07-11 24 views
0

我有一个不能正常工作的集成测试。它似乎很直接,为什么它不会工作,但我试图修复它约2小时,不能。测试错误预计至少有一个元素与“login_path”匹配

似乎非常简单。我看不出这有什么问题。任何线索?

当我运行耙测试

1) Failure: 
UsersLoginTest#test_login_with_valid_information_followed_by_logout [/Users/josephkonop/Documents/Safsy/Website/Safsy/Safsy/test/integration/users_login_test.rb:32]: 
Expected at least 1 element matching "a[href="/login"]", found 0.. 
Expected 0 to be >= 1. 

测试的误差。第32行是assert_select “一个[HREF =?]”,login_path

test "login with valid information followed by logout" do 
    get login_path 
    post login_path, sessions: { email: @user.email, password: 'password' } 
    assert is_logged_in? 
    assert_redirected_to @user 
    follow_redirect! 
    assert_template 'users/show' 
    assert_select "a[href=?]", login_path, count: 0 
    assert_select "a[href=?]", logout_path 
    assert_select "a[href=?]", user_path(@user) 
    delete logout_path 
    assert_not is_logged_in? 
    assert_redirected_to root_url 
    assert_select "a[href=?]", login_path 
    assert_select "a[href=?]", signup_path 
    assert_select "a[href=?]", logout_path,  count: 0 
    assert_select "a[href=?]", user_path(@user), count: 0 
    end 

我_header在登录按钮是

 <ul class="nav navbar-nav navbar-right"> 
     <% if logged_in? %> 
      <li><%= link_to "Users", users_path %></li> 
      <li><%= link_to "Dash", users_path %></li> 
      </li> 
      <ul class="nav navbar-nav"> 
      <li class="dropdown"> 
       <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Items<span class="caret"></span></a> 
       <ul class="dropdown-menu"> 
       <li><%= link_to "New Item", new_item_path %></li> 
       <li><%= link_to "Edit Items", user_items_path %></li> 
       <li><a href="#">Mass Upload Items</a></li> 
       <li><a href="#">Upload Item Images</a></li> 
       </ul> 
      </li> 
      </ul> 
      <ul class="nav navbar-nav"> 
      <li class="dropdown"> 
       <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Profile<span class="caret"></span></a> 
       <ul class="dropdown-menu"> 
       <li><%= link_to "View Profile", user_path(current_user) %></li> 
       <li><%= link_to "Edit Profile", edit_user_path(current_user) %></li> 
       </ul> 
      </li> 
      </ul> 
      <li><%= link_to "Messages", users_path %></li> 
      <li><%= link_to "Log out", logout_path, method: "delete" %></li> 
     <% else %> 
      <li><%= link_to "Log In", login_path %></li> 
      <li><a href="#">Sign Up</a></li> 
     <% end %> 
     </ul> 
    </div><!-- /.navbar-collapse --> 
    </div><!-- /.container-fluid --> 
</header> 

回答

0

我建议你使用assert_no_tag。我不认为assert_select支持count: 0作为“找不到元素”。

因此,像:

assert_no_tag "a[href=\"#{login_path}\"]" 

这可能是您可以使用这些语法,但我没有测试过:

assert_no_tag "a", attributes: { href: login_path } 
assert_no_tag "a[href=?]", login_path 
1

您需要按照重定向断言你”后,已被重定向,但在检查url之前。

Hartl's tutorial

test "login with valid information followed by logout" do 
    get login_path 
    post login_path, session: { email: @user.email, password: 'password' } 
    assert is_logged_in? 
    assert_redirected_to @user 
    follow_redirect! 
    assert_template 'users/show' 
    assert_select "a[href=?]", login_path, count: 0 
    assert_select "a[href=?]", logout_path 
    assert_select "a[href=?]", user_path(@user) 
    delete logout_path 
    assert_not is_logged_in? 
    assert_redirected_to root_url 
    follow_redirect! # This is the line you need  <--- 
    assert_select "a[href=?]", login_path 
    assert_select "a[href=?]", logout_path,  count: 0 
    assert_select "a[href=?]", user_path(@user), count: 0 
end 
相关问题