rspec validates_presence_of多态属性ruby on rails

时间:2010-10-20 20:25:57

标签: ruby-on-rails rspec polymorphism factory-bot

我正在为具有名为: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,但如果我从任何其他模型创建,让我们说一个用户模型或商店模型,它将放入正确的数据。因此,我试图弄清楚并研究失败的是,如何验证多态属性并通过工厂对其进行测试。

很抱歉长篇大论但是我在过去的几个小时里找不到解决方案,我开始考虑我可能会以错误的方式接近这个。

1 个答案:

答案 0 :(得分:0)

我的规范中没有看到任何与地址相关联的地址。你正在创建一个地址,但它只是在空间 - 它连接到什么? addressable_id和addressable_type的NULL似乎是正确的。