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ď č. 1Objavil (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.