/ / RSpec test index index a will_paginate - rubíny na koľajniciach, rspec, factory-bot, will-paginate

RSpec test index index a will_paginate - ruby-na-koľajnice, rspec, factory-bot, will-paginate

Som nový v teste s Ruby a ja používam Rspec & Továrenské dievča pre to.

Chcem vyskúšať moje indexové zobrazenie, ktoré samozrejme má will_paginate v ňom.

Tu je môj kontrolór:

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

Mám základný názor s will_paginate a tabuľku výrobkov.

Tu je 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

Najprv je to správny spôsob, ako to urobiť: vytvoriť pole a potom ho priradiť?

Opravte ma, ak sa mýlim, ale assign(:products, @products) je ekvivalentom @products = Product.paginate(:page => params[:page], :per_page=>30) na testovanie ?

odpovede:

2 pre odpoveď č. 1

Objavil (a) som svoj problém týmto kódom:

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

Súhlasím s akýmkoľvek návrhom na toto riešenie.


0 pre odpoveď č. 2

Nie, to nie je to isté, pretože pole je iné ako ActiveRecord :: Vzťah s Metódy vzťahov (to je čo Product.paginate(:page => params[:page], :per_page=>30) sa vracia). Možno je to lepšia cesta, ale to by malo fungovať:

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

Tu @products = WillPaginate::Collection.new(4,10,0) vytvára kolekciu s 4 stránkami a 10 prvkami na každej stránke.