/ / RSpec тест индекс тест и will_paginate - руби-на-релси, rspec, factory-bot, ще-paginate

RSpec тест индекс тест и will_paginate - руби-на-релси, rspec, factory-bot, ще-пагине

Аз съм нов в тест с Руби и аз използвам 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 елемента на всяка страница.