[英]Rspec controller test fails after using kaminari for pagination
我在使用kaminari進行分頁時使用rspec的控制器測試失敗。我的Controller代碼和rspec測試如下所示。
app / controllers / 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
您能幫忙解決這個問題嗎? 先感謝您。
上面提到的@dax在我選擇所有課程的一個控制器中解決了我的問題,但是在另一個我使用嵌套資源的控制器中,此方法不起作用。 我關注了@ArupRakshit的評論,它適用於所有情況。
下面是解決該問題的方法。
Kaminari.paginate_array(Course.all).page(params[:page]).per(15)
我認為您應該從以下行中刪除all
內容:
@courses = Course.all.page(params[:page]).per(15)
所以看起來像這樣:
@courses = Course.page(params[:page]).per(15)
這似乎與Kaminari文檔更加一致:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.