使用kaminari进行分页时,使用rspec的控制器测试失败。我的控制器代码& rspec测试如下所示。
应用程序/控制器/ courses_controller.rb
def index
@courses = Course.all.page(params[:page]).per(15)
authorize! :read, @courses
respond_to do |format|
format.html # index.html.erb
format.json { render json: @courses }
end
end
规格/控制器/ courses_controller.rb
describe "GET index" do
it "assigns all courses as @courses" do
course = create(:course)
get :index, { }
expect(assigns(:courses)).to eq([course])
end
end
输出:
Failures:
1) CoursesController GET index assigns all courses as @courses
Failure/Error: get :index, { }
ArgumentError:
wrong number of arguments (1 for 0)
# ./app/controllers/courses_controller.rb:5:in `index'
# ./spec/controllers/courses_controller_spec.rb:13:in `block (3 levels) in <top (required)>'
# -e:1:in `<main>'
但是,如果我不在控制器中使用分页,它可以工作,下面是不使用分页的代码。
def index
@courses = Course.all
authorize! :read, @courses
respond_to do |format|
format.html # index.html.erb
format.json { render json: @courses }
end
end
您能帮忙解决这个问题吗?提前谢谢。
答案 0 :(得分:1)
上面提到的@dax在我选择所有课程的控制器之一解决了我的问题,但是在另一个控制器中,我使用了嵌套资源,这不起作用。我关注了@ArupRakshit评论,它适用于所有场景。
以下是问题的解决方法。
Kaminari.paginate_array(Course.all).page(params[:page]).per(15)
答案 1 :(得分:0)
我认为您应该从以下行中删除all
:
@courses = Course.all.page(params[:page]).per(15)
所以它看起来像这样:
@courses = Course.page(params[:page]).per(15)
这似乎更符合Kaminari documentation:
To fetch the 7th page of users (default per_page is 25)
User.page(7)
To show a lot more users per each page (change the per_page value)
User.page(7).per(50)