![](/img/trans.png)
[英]Hartl Sample App Failure in integration test for 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.