[英]RSpec test with factory_girl and will_paginate for associated objects
我在用rspec为will_paginate编写测试时遇到问题。 问题是我有一个拥有很多宠物的主人的模型。 这将导致一个如下所示的factory.rb文件:
Factory.define :owner do |owner| owner.personid "1111111" owner.firstname "Nisse" owner.lastname "Gunnarsson" owner.street "Street" owner.postaladress "38830" owner.town "Town" owner.phone "555-5555" owner.mobile "555-5556" owner.email "nisse@test.com" owner.reminder true end Factory.define :pet do |pet| pet.name "Hedvig" pet.specie "Rabbot" pet.breed "Lowen/vadur" pet.colour "Madagaskar" pet.association :owner end
在我的测试中
describe "Get show" do before(:each) do @owner = Factory(:owner) 30.times do #@owner.pets << Factory.build(:pet) @pet = Factory.build(:pet, :owner => @owner) #@owner.pets << @pet end end it "should have an element for each pet" do get :show, :id => @owner @owner.pets[0..2].each do |pet| response.should have_selector("td", :content => pet.name) end response.should have_selector("td", :content => "Hedvig") end it "should paginate pets" do get :show, :id => @owner response.should have_selector("div.pagination") response.should have_selector("span.disabled", :content => "Previous") response.should have_selector("a", :href => "/pets?page=2", :content => "2") response.should have_selector("a", :href => "/pets?page=2", :content => "Next") end
end
describe "Get show" do before(:each) do @owner = Factory(:owner) 30.times do #@owner.pets << Factory.build(:pet) @pet = Factory.build(:pet, :owner => @owner) #@owner.pets << @pet end end it "should have an element for each pet" do get :show, :id => @owner @owner.pets[0..2].each do |pet| response.should have_selector("td", :content => pet.name) end response.should have_selector("td", :content => "Hedvig") end it "should paginate pets" do get :show, :id => @owner response.should have_selector("div.pagination") response.should have_selector("span.disabled", :content => "Previous") response.should have_selector("a", :href => "/pets?page=2", :content => "2") response.should have_selector("a", :href => "/pets?page=2", :content => "Next") end
end
因此,我在工厂创建了一个所有者,那里没有问题。 我可以通过puts @owner.firstname
获得所有者名称
我也可以创建一个拥有正确主人( @pet.owner.firstname
)的宠物,但是我不知道如何用宠物填充主人数组(@ owner.pets)。
如果我执行@ owner.pets.count,则它为0。
应用程序运行良好,我只是想不出如何编写测试。 我对Rails和TDD都很陌生,但是我想做对。
让我知道是否应该添加更多信息。
干杯卡尔
首先,执行@pet = Factory.build(:pet, :owner => @owner)
只会构建一个Pet对象,但绝不会将其保存到数据库中。 您可能想使用Factory.create(:pet, ...
使其实际保存。
最初创建Owner对象时, @owner.pets
数组为[]。 如果仅使用Factory.create
在数据库中创建记录,那么可以,技术上@owner
有pets,但是@owner
对象不知道它们,因为它已经在内存中带有[]的.pets
数组。
相反,请尝试以下操作:
@owner.pets << Factory.create(:pet, :owner => @owner)
这不仅将其保存到数据库中,从而使对数据库的任何新调用均有效(例如,如果现在执行Pet.count
您将获得1),而且内存中的@owner.pets
数组将具有有效值。宠物对象在其中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.