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