You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails教程用户测试失败求助:分页元素div.pagination未找到

排查Rails教程示例应用的分页测试失败问题

嘿,别担心,新手遇到测试问题太正常了!我来帮你一步步排查这两个分页相关的测试失败问题~

你遇到的两个错误

  • UsersIndexTest#test_index_as_admin_including_pagination_and_delete_links:期望至少1个匹配div.pagination的元素,实际找到0个
  • UsersProfileTest#test_profile_display:期望至少1个匹配div.pagination的元素,实际找到0个

第一个问题:个人页面(Profile)测试失败

你的show.html.erb里确实写了<%= will_paginate @microposts %>,但测试没找到分页组件,核心原因是测试用的用户没有足够多的micropost触发分页。

Rails的will_paginate默认只有当记录数超过每页显示数(默认是30条)时,才会渲染分页容器。如果你的测试用户只有几条micropost,分页组件根本不会出现,自然过不了assert_select 'div.pagination'这一关。

解决方法

在user_profile_test.rb的测试方法里,给测试用户创建至少31条micropost:

test "profile display" do
  # 先创建足够多的micropost触发分页
  31.times { @user.microposts.create!(content: "随便写点测试内容就行") }
  
  get user_path(@user)
  assert_template 'users/show'
  assert_select 'title', full_title(@user.name)
  assert_select 'h1', text: @user.name
  assert_select 'h1>img.gravatar'
  assert_match @user.microposts.count.to_s, response.body
  assert_select 'div.pagination'
  @user.microposts.paginate(page: 1).each do |micropost|
    assert_match micropost.content, response.body
  end
end

第二个问题:用户列表(Index)测试失败

这个测试检查的是用户列表的分页,问题大概率出在用户列表的视图或控制器逻辑上(你没贴users/index.html.erb和users_controller.rb的代码,我按教程常规情况分析)。

需要检查的点:

  1. 控制器里是否用了分页获取用户
    打开app/controllers/users_controller.rb,确认index动作里是用paginate获取用户:

    def index
      @users = User.paginate(page: params[:page])
    end
    

    如果直接用User.all,没有分页逻辑,自然不会有分页组件。

  2. 用户列表视图是否添加了分页组件
    打开app/views/users/index.html.erb,确认里面有will_paginate调用:

    <%= will_paginate %>
    

    通常放在用户列表的上方或下方。

  3. 测试数据的用户数量是否足够
    和个人页面的问题一样,测试里的用户总数要超过30个才能触发分页。你可以在测试的setup方法里创建足够多的测试用户:

    setup do
      @admin = User.create!(name: "Admin", email: "admin@example.com", password: "password", admin: true)
      @non_admin = User.create!(name: "NonAdmin", email: "nonadmin@example.com", password: "password")
      # 创建30个额外用户,让总数达到32个,触发分页
      30.times { |n| User.create!(name: "User #{n}", email: "user#{n}@example.com", password: "password") }
    end
    

通用检查项

最后确认一下will_paginate gem是否正确安装:

  • 检查Gemfile里是否有gem 'will_paginate'
  • 如果刚添加,记得运行bundle install

内容的提问来源于stack exchange,提问作者Chidozie Nnachor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:38:57