rspec validates_presence_of полиморфных атрибутов ruby ​​on rails

Я пишу rspec для модели адреса с полиморфным атрибутом :addressable. Я использую фабричную девушку для тестирования.

У этой модели нет контроллера, потому что я не хочу создавать автономный адрес, но это не мешает 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, но если я создам из любой другой модели, скажем, модели пользователя или модели магазина, он поместит правильные данные. Итак, что я пытаюсь выяснить и исследовать, но безуспешно, так это то, как вы проверяете_присутствие_полиморфного атрибута и тестируете его через фабрику.

Извините за многословие, но я не смог найти решение для этого за последние пару часов, и я начинаю думать, что, возможно, подхожу к этому неправильно.


person rrivas    schedule 20.10.2010    source источник


Ответы (1)


Я не вижу в вашей спецификации ничего, что связывало бы адрес с адресуемым. Вы создаете адрес, но он просто в космосе — с чем он связан? NULL для addressable_id и addressable_type кажется правильным.

person Martin Streicher    schedule 07.04.2011