测试错误预计至少有一个元素与“login_path”匹配
问题描述:
我有一个不能正常工作的集成测试。它似乎很直接,为什么它不会工作,但我试图修复它约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>
答
我建议你使用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
答
您需要按照重定向断言你”后,已被重定向,但在检查url之前。
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