我正在为具有名为:addressable
的多态属性的地址模型编写rspec。我正在用工厂女孩进行测试。
此模型没有控制器,因为我不希望创建独立地址,但这并不能阻止rspec创建独立地址。我的模型,工厂和rspec是
class Address < ActiveRecord::Base
belongs_to :addressable, :polymorphic => true
belongs_to :state
attr_accessible :street, :city, :state_id, :zip
validates_presence_of :street, :city, :zip, :state
validates_associated :state
end
Factory.define :address do |address|
address.street "1234 Any st"
address.city "Any City"
address.zip "90001"
address.association :state
end
describe Address do
before(:each) do
state = Factory(:state)
@attr = {:street => "1234 Any St", :city => "Any City", :zip => "Any Zip", :state_id => state.id}
end
it "should create a new address given valid attributes" do
Address.create!(@attr).valid?.should be_true
end
end
这个rspec测试将创建一个地址,其中addressable_id和addressable_type为NULL和NULL,但如果我从任何其他模型创建,让我们说一个用户模型或商店模型,它将放入正确的数据。因此,我试图弄清楚并研究失败的是,如何验证多态属性并通过工厂对其进行测试。
很抱歉长篇大论但是我在过去的几个小时里找不到解决方案,我开始考虑我可能会以错误的方式接近这个。
答案 0 :(得分:0)
我的规范中没有看到任何与地址相关联的地址。你正在创建一个地址,但它只是在空间 - 它连接到什么? addressable_id和addressable_type的NULL似乎是正确的。