我正在使用Rails Tutorial by Michael Hartl,但在使用此测试向用户路径发出删除请求时,我正在努力验证用户是否已被销毁。
当我在Cloud 9上启动应用程序并实际进入所有用户索引并删除用户时,它确实消失了,所以这一直是一个障碍!
这是user_index_test.rb文件
require 'test_helper'
class UsersIndexTest < ActionDispatch::IntegrationTest
def setup
@user = users(:Robert)
@admin = users(:Robert)
@non_admin = users(:archer)
end
test "index as admin including pagination and delete links" do
log_in_as(@admin)
get users_path
assert_template 'users/index'
first_page_of_users = User.paginate(page: 1)
first_page_of_users.each do |user|
assert_select "a[href=?]", user_path(user)
unless user == @admin
assert_select user_path(user), :text => 'delete'
end
end
assert_difference 'User.count', -1 do
delete user_path(@non_admin)
end
end
end
这是index.html.erb文件
<ul class="users">
<% @users.each do |user| %>
<li>
<%= gravatar_for user, size: 50 %>
<%= link_to user.name, user %>
<% if current_user.admin? && !current_user?(user) %>
<%= link_to "delete", user, method: :delete,
data: { confirm: "You sure?" } %>
<% end %>
</li>
<% end %>
</ul>
<%= will_paginate %>
错误代码:
....................................DEPRECATION WARNING: The assertion
was not run because of an invalid css selector.
unexpected '950961012' after 'CHILD_SELECTOR' (called from block (2
levels) in <class:UsersIndexTest> at
/home/ubuntu/workspace/test/integration/users_index_test.rb:19)
F...
1) Failure:
UsersIndexTest#test_index_as_admin_including_pagination_and_delete_links
[/home/ubuntu/workspace/test/integration/users_index_test.rb:23]:
"User.count" didn't change by -1.
Expected: 1
Actual: 2
我已经尝试将assert_select更改为[href =],[href],在查看源代码后删除折旧警告但更无效。我已经被困在这里几天了,我想问一下。
任何帮助表示赞赏:)
更新1: 正如@UriAgassi指出的那样,我的assert_select语句失败了,导致Rails没有选择正确的标签,因此没有通过DELETE请求。
所以我试图创建一个新的assert_select命令,但麻烦的是,我试图选择的<a>
标签就在一个锚标签之后。
新用户指数测试:
first_page_of_users.each do |user|
assert_select "a[href=?]", user_path(user), :text => user.name
unless user == @admin
assert_select "a[class=?]", 'user', :test => 'delete'
end
end
HTML页面
<li>
<img alt="Robert" class="gravatar"
src="https://secure.gravatar.com/avatar/e831ff7d5e2cad2c7da9249aa28343c9?s=50" />
<a href="/users/1">Robert</a>
</li>
<li>
<img alt="Dr. Lonzo Rosenbaum" class="gravatar"
src="https://secure.gravatar.com/avatar/ef4fac9f70a2ad49b02546f3aa416a61?s=50" />
<a href="/users/3">Dr. Lonzo Rosenbaum</a>
**<!-- User to delete, tag to select class="user"-->**
<a class="user" data-confirm="You sure?"
rel="nofollow" data-method="delete" href="/users/3">delete</a>
</li>
新错误讯息:
1) Failure:
UsersIndexTest#test_index_as_admin_including_pagination_and_delete_links
[/home/ubuntu/workspace/test/integration/users_index_test.rb:19]:
Expected at least 1 element matching "a[class="user"]", found 0..
Expected 0 to be >= 1.
答案 0 :(得分:0)
所以看起来测试没有正确调用destroy动作 试试这样:
delete :destroy, id: @non_admin.id
答案 1 :(得分:0)
您的语法错误很少,可能会在第19行上破坏您的测试:
assert_select user_path(user), :text => 'delete'
这应该是:
assert_select user_path(@user), :text => 'delete'