繁体   English   中英

使用Factory_girl和will_paginate对关联对象进行RSpec测试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM