rspec validates_presence_of полиморфных атрибутов ruby ​​на рельсах - PullRequest
2 голосов
/ 21 октября 2010

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

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

1 Ответ

0 голосов
/ 07 апреля 2011

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

...