Mes tests de contrôleur utilisant rspec échouent lorsque kaminari est utilisé pour la pagination. Les tests de code et de contrôleur de contrôleur sont indiqués ci-dessous.
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
spec / controllers / 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
SORTIE:
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>"
Cependant, si je n'utilise pas la pagination dans le contrôleur, cela fonctionne. Ci-dessous, le code qui n'utilise pas la pagination.
def index
@courses = Course.all
authorize! :read, @courses
respond_to do |format|
format.html # index.html.erb
format.json { render json: @courses }
end
end
Pouvez-vous aider à gérer ce problème. Merci d'avance.
Réponses:
0 pour la réponse № 1Je pense que tu devrais enlever all
à partir de la ligne suivante:
@courses = Course.all.page(params[:page]).per(15)
Alors ça ressemble à ça:
@courses = Course.page(params[:page]).per(15)
Cela semble être plus conforme à la Documentation 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)
1 pour la réponse № 2
Ce que @dax mentionné ci-dessus a résolu mon problèmel'un des contrôleurs où je sélectionnais tous les cours, mais dans un autre contrôleur où j'utilisais des ressources imbriquées, cela ne fonctionnait pas. J'ai suivi les commentaires de @ArupRakshit et cela fonctionne pour tous les scénarios.
Vous trouverez ci-dessous la solution au problème.
Kaminari.paginate_array(Course.all).page(params[:page]).per(15)