/ / Widok indeksu testu RSpec i will_paginate - ruby-on-rails, rspec, factory-bot, will-paginate

Widok indeksu testu RSpec i will_paginate - ruby-on-rails, rspec, factory-bot, will-paginate

Jestem nowy w testach z Ruby i używam Rspec & FactoryGirl za to.

Chcę przetestować mój widok indeksu, który oczywiście ma will_paginate w tym.

Oto mój kontroler:

def index
@products = Product.paginate(:page => params[:page], :per_page=>30)
respond_with(@products)
end

Mam podstawowy pogląd na will_paginate i tabelą produktów.

Oto mój test:

RSpec.describe "products/index", type: :view do
before(:each) do
@products = Array.new
31.times do
@products << FactoryGirl.create(:product)
end
assign(:products, @products)
end

it "renders a list of products" do
render
end
end

Po pierwsze, czy jest to właściwa droga: stworzyć tablicę, a następnie ją przypisać?

Popraw mnie, jeśli się mylę, ale assign(:products, @products) jest odpowiednikiem @products = Product.paginate(:page => params[:page], :per_page=>30) dla testu ?

Odpowiedzi:

2 dla odpowiedzi № 1

Pominąłem mój problem z tym kodem:

RSpec.describe "products/index", type: :view do
before(:each) do
# Create a list of 31 products with FactoryGirl
assign(:products, create_list(:product, 31))
end

it "renders a list of products" do
allow(view).to receive_messages(:will_paginate => nil)
render
end
end

Jestem otwarty na wszelkie sugestie dotyczące tego rozwiązania.


0 dla odpowiedzi nr 2

Nie, to nie to samo, ponieważ tablica różni się od ActiveRecord :: Relation with Metody relacji (Co to jest Product.paginate(:page => params[:page], :per_page=>30) zwraca). Być może jest lepszy sposób, ale powinno to zadziałać:

RSpec.describe "products/index", type: :view do
before(:each) do
@products = WillPaginate::Collection.new(4,10,0)
31.times do
@products << FactoryGirl.create(:product)
end
assign(:products, @products)
end

it "renders a list of products" do
render
end
end

Tutaj @products = WillPaginate::Collection.new(4,10,0) tworzy kolekcję z 4 stronami i 10 elementami na każdej stronie.