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