2013-12-09 3 views
1

Я пытаюсь отобразить список пользователей в приложении. Для этого я использую жемчужину will_paginate. Но когда я пытаюсь изменить количество пользователей, отображаемых на странице, тесты падают, несмотря на то, что приложение продолжает работать правильно (я так думаю).Спецификация не работает после использования разбивки на страницы: per_page

Кусок кода из user_pages_spec.rb

describe "pagination" do 

    before(:all) { 30.times { FactoryGirl.create(:user) } } 
    after(:all) { User.delete_all } 

    it { should have_selector('div.pagination') } 

    it "should list each user" do 
    User.paginate(page: 1).each do |user| 
     expect(page).to have_selector('li', text: user.name) 
    end 
    end 
end 

код из factories.rb

FactoryGirl.define do 
    factory :user do 
    sequence(:name) { |n| "Person #{n}" } 
    sequence(:email) { |n| "person_#{n}@example.com"} 
    password "foobar" 
    password_confirmation "foobar" 

    factory :admin do 
     admin true 
    end 
    end 
end 

users_controller.rb

class UsersController < ApplicationController 
    before_action :signed_in_user, only: [:index, :edit, :update, :destroy] 
    before_action :correct_user, only: [:edit, :update] 
    before_action :admin_user,  only: :destroy 

    def index 
    #WANT TO CHANGE, DOESN'T WORK 
    #@users = User.order('name ASC').paginate(:page => params[:page], :per_page => 8) 

    #WORK 
    #@users = User.order('name ASC').paginate :page => params[:page] 

    #WORK 
    #@users = User.paginate(:page => params[:page], :per_page => 30) 

    #DOESN'T WORK 
    @users = User.paginate(:page => params[:page], :per_page => 8) 
    end 
... 
end 

Gemfile:

... 
gem 'will_paginate', '3.0.4' 
gem 'bootstrap-will_paginate', '0.0.9' 
... 

Результаты команды расслоении Exec Rspec спецификации/запросы/user_pages_spec.rb

Failures: 

    1) User pages index pagination should list each user 
    Failure/Error: expect(page).to have_selector('li', text: user.name) 
     expected #has_selector?("li", {:text=>"Person 38"}) to return true, got false 
    # ./spec/requests/user_pages_spec.rb:26:in `block (5 levels) in <top (required)>' 
    # ./spec/requests/user_pages_spec.rb:25:in `block (4 levels) in <top (required)>' 

Finished in 5.51 seconds 
32 examples, 1 failure 

Failed examples: 

rspec ./spec/requests/user_pages_spec.rb:24 # User pages index pagination should list each user 

Он работает только тогда, когда в user_pages_spec.rb и в users_controller.rb - номер (значение по умолчанию для will_paginate). Падая только этот тест, другие проходят. Небольшая помощь будет приятной.

ответ

4

добавить такое же изменение на Rspec спецификации/запросов/user_pages_spec.rb

User.paginate(page: 1, :per_page => 8).each do |user| 
+0

Он прекрасно работает. Большое спасибо! – Shapoval

Смежные вопросы