簡體   English   中英

使用kaminari進行分頁后,Rspec控制器測試失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM