Аз съм нов в тест с Руби и аз използвам Rspec & FactoryGirl за това.
Искам да тествам индексния си изглед, който очевидно има will_paginate
в него.
Ето моят контролер:
def index
@products = Product.paginate(:page => params[:page], :per_page=>30)
respond_with(@products)
end
Имам един основен изглед с will_paginate
и таблица с продукти.
Тук е моят тест:
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
На първо място, дали е правилният начин да го направите: Създайте масив, след което го определете?
Коригирайте ме, ако греша, но assign(:products, @products)
е равностойността на @products = Product.paginate(:page => params[:page], :per_page=>30)
за тест ?
Отговори:
2 за отговор № 1Прескочих проблема си с този код:
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
Отворен съм за всяко предложение за това решение.
0 за отговор № 2
Не, това не е същото, защото масивът е различен от ActiveRecord :: Relation with Методи за връзка (това е така Product.paginate(:page => params[:page], :per_page=>30)
се завръща). Може би е по-добър начин, но това трябва да работи:
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
Тук @products = WillPaginate::Collection.new(4,10,0)
създава колекция с 4 страници и 10 елемента на всяка страница.