使用kaminari进行分页后,Rspec控制器测试失败

时间:2014-07-07 09:54:37

标签: ruby-on-rails ruby rspec pagination kaminari

使用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

您能帮忙解决这个问题吗?提前谢谢。

2 个答案:

答案 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)