我是使用Ruby测试的新手,我使用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)
以进行测试?
答案 0 :(得分:2)
我用这段代码绕过了我的问题:
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
我对此解决方案有任何建议。
答案 1 :(得分:1)
不,这不一样。因为数组与具有Relation methods的ActiveRecord :: Relation不同(这是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个元素的集合。