测试失败,因为缺少开发中的链接
Test fails because of missing links that however are there in development
下面的测试生成错误消息:
Expected at least 1 element matching "a[href="/organizations/589088021"]", found 0..
Expected 0 to be >= 1.
test/integration/site_layout_test.rb:47:in `block (2 levels) in <class:SiteLayoutTest>'
test/integration/site_layout_test.rb:46:in `block in <class:SiteLayoutTest>'
然而在开发中它是有效的。错误所指的 links 在那里并且可以运行。有人知道原因吗?
测试:
get users_path
assert_template 'users/index'
User.paginate(page: 1).each do |user|
assert_select 'a[href=?]', user_path(user)
end
get organizations_path
assert_template 'organizations/index'
Organization.paginate(page: 1).each do |organization| # THIS IS LINE 46!!
assert_select 'a[href=?]', organization_path(organization) # THIS IS LINE 47!!
end
get members_path
assert_template 'members/index'
Member.paginate(page: 1).each do |member|
assert_select 'a[href=?]', member_path(member)
end
如果我从测试中删除第二段,测试会为成员产生相同的错误。然而,它不会为用户生成错误(从测试中删除第二段和第三段,然后测试通过)。我没有发现用户和 organizations/members 之间的代码有任何差异来解释这一点。我能想到的唯一区别是组织和成员之间的 1:many 关系(用户没有关系),但我看不出这有什么关系。
组织索引视图:
<%= will_paginate @organizations %>
<% @organizations.each do |organization| %>
<tr>
<td>
<% if organization.avatar? %>
<%= link_to image_tag(organization.avatar.url), organization_path(organization) %> <%= organization.org_name %>
<% else %>
<%= link_to image_tag("profile.gif"), organization_path(organization) %> <%= organization.org_name %>
<% end %>
</td>
<td>some other variables</td>
<td><%= link_to image_tag("icon_delete.gif", title: "remove"), organization, method: :delete, data: { confirm: "Are you certain?" } %>
</td>
<% end %>
</tr>
<% end %>
组织管理员:
def index
@organizations = Organization.paginate(page: params[:page], :per_page => 20)
end
更新:问题似乎出在加载组织的顺序上。使用 puts @response.body
查看正文,它显示返回了正确数量的组织,并且它们确实有 link。但是,测试显示缺少 link 的组织不是 page: 1
的一部分,因此确实未包含在正文中。这似乎是一个排序问题,当我将测试的第 46 行更改为:
时得到确认
Organization.where(email: !nil).each do |organization|
以便它查看所有组织,因此顺序不再重要。然后测试通过。我不明白为什么测试需要不同的组织成为 page: 1
的一部分,以及我应该如何调整测试才能使其正常工作。
一旦我开始向用户固定装置添加其他用户,关于用户模型的第一个测试就会出现同样的问题。
后来改用kaminari做分页。我仍然遇到同样的问题:。当我在测试代码中添加命令时,问题就消失了。
下面的测试生成错误消息:
Expected at least 1 element matching "a[href="/organizations/589088021"]", found 0..
Expected 0 to be >= 1.
test/integration/site_layout_test.rb:47:in `block (2 levels) in <class:SiteLayoutTest>'
test/integration/site_layout_test.rb:46:in `block in <class:SiteLayoutTest>'
然而在开发中它是有效的。错误所指的 links 在那里并且可以运行。有人知道原因吗?
测试:
get users_path
assert_template 'users/index'
User.paginate(page: 1).each do |user|
assert_select 'a[href=?]', user_path(user)
end
get organizations_path
assert_template 'organizations/index'
Organization.paginate(page: 1).each do |organization| # THIS IS LINE 46!!
assert_select 'a[href=?]', organization_path(organization) # THIS IS LINE 47!!
end
get members_path
assert_template 'members/index'
Member.paginate(page: 1).each do |member|
assert_select 'a[href=?]', member_path(member)
end
如果我从测试中删除第二段,测试会为成员产生相同的错误。然而,它不会为用户生成错误(从测试中删除第二段和第三段,然后测试通过)。我没有发现用户和 organizations/members 之间的代码有任何差异来解释这一点。我能想到的唯一区别是组织和成员之间的 1:many 关系(用户没有关系),但我看不出这有什么关系。
组织索引视图:
<%= will_paginate @organizations %>
<% @organizations.each do |organization| %>
<tr>
<td>
<% if organization.avatar? %>
<%= link_to image_tag(organization.avatar.url), organization_path(organization) %> <%= organization.org_name %>
<% else %>
<%= link_to image_tag("profile.gif"), organization_path(organization) %> <%= organization.org_name %>
<% end %>
</td>
<td>some other variables</td>
<td><%= link_to image_tag("icon_delete.gif", title: "remove"), organization, method: :delete, data: { confirm: "Are you certain?" } %>
</td>
<% end %>
</tr>
<% end %>
组织管理员:
def index
@organizations = Organization.paginate(page: params[:page], :per_page => 20)
end
更新:问题似乎出在加载组织的顺序上。使用 puts @response.body
查看正文,它显示返回了正确数量的组织,并且它们确实有 link。但是,测试显示缺少 link 的组织不是 page: 1
的一部分,因此确实未包含在正文中。这似乎是一个排序问题,当我将测试的第 46 行更改为:
Organization.where(email: !nil).each do |organization|
以便它查看所有组织,因此顺序不再重要。然后测试通过。我不明白为什么测试需要不同的组织成为 page: 1
的一部分,以及我应该如何调整测试才能使其正常工作。
一旦我开始向用户固定装置添加其他用户,关于用户模型的第一个测试就会出现同样的问题。
后来改用kaminari做分页。我仍然遇到同样的问题: