繁体   English   中英

集成测试:`assert_select'a [href =?]'`对于分页的页面失败

[英]Integration test: `assert_select 'a[href=?]'` fails for paginated pages

我有许多看起来像的集成测试:

first_page_of_users = User.page(1)                    # Using kaminari for pagination.
first_page_of_users.each do |user|
  assert_select 'a[href=?]', user_path(user)
end

这些测试失败,并显示以下错误消息:

Expected at least 1 element matching "a[href="/users/1"]", found 0..

我在测试中添加了puts @response.body以查看其响应的代码。

对于响应正文中包含的所有用户,它具有正确的href,例如href="/users/75938613" 但是, /users/后面的数字要高得多,并且确实不存在“ users1”(不仅不存在url,而且整个记录也不在该页面上)。 如果我确保只有少数固定装置,以免出现任何分页,则测试通过。 这使我觉得first_page_of_users = User.page(1)应用顺序与first_page_of_users.each do |user|记录中的顺序不同 assert_select 'a[href=?]', user_path(user)期望...

是什么导致此错误? 它适用于我的应用程序的不同页面和模型。


更新:对于其他型号,即使我尝试

Organization.all.each do |org|
  puts @response.body
  assert_select 'a[href=?]', organization_path(org)
end

我收到错误:

Expected at least 1 element matching "a[href="/organizations/fix0"]",

响应的正文中根本没有名称为“ fix0”的组织。 我的(缩短的)灯具在下面,它们确认不应该有该名称的组织。 知道发生了什么吗?

one:
  name: abcd
  activated: true
  activated_at: 2015-04-16 11:38:53

two:
  name: efgh
  activated: true
  activated_at: 2015-04-16 11:38:53

<% 35.times do |n| %>
organization_<%= n %>:
  name: <%="fix#{n}" %>
  activated: true
  activated_at: <%= Time.zone.now %>
<% end %>

在进行集成测试时,重要的是要跟踪应该在哪里显示并进行测试。 因为在这种情况下,第一页的记录太多,所以任何会落在后续页上的记录都会导致测试失败。 您怀疑,类似这样的事情应该验证结果的第一页是否存在:

Organization.order('organizations.name','desc').page(1).each do |organization|
     assert_select 'a[href=?]', organization_path(organization)
end

我建议保留较小的数据集进行测试,因为在这种情况下,您还应该在测试中“获取”第二页,并对“ page(2)”执行上述声明。 这意味着此集成测试必须发出两个get请求(以及您可能需要的任何设置)并检查结果,并养成一个习惯,这可能会降低套件的速度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM