Дизайн
У меня есть модель User, которая принадлежит профилю через полиморфную ассоциацию. Причину, по которой я выбрал этот дизайн, можно найти здесь . Подводя итог, можно сказать, что многие пользователи приложения имеют действительно разные профили.
class User < ActiveRecord::Base
belongs_to :profile, :dependent => :destroy, :polymorphic => true
end
class Artist < ActiveRecord::Base
has_one :user, :as => :profile
end
class Musician < ActiveRecord::Base
has_one :user, :as => :profile
end
После выбора этого дизайна мне трудно придумать хорошие тесты. Используя FactoryGirl и RSpec, я не уверен, как объявить ассоциацию наиболее эффективным способом.
Первая попытка
factories.rb
Factory.define :user do |f|
# ... attributes on the user
# this creates a dependency on the artist factory
f.association :profile, :factory => :artist
end
Factory.define :artist do |a|
# ... attributes for the artist profile
end
user_spec.rb
it "should destroy a users profile when the user is destroyed" do
# using the class Artist seems wrong to me, what if I change my factories?
user = Factory(:user)
profile = user.profile
lambda {
user.destroy
}.should change(Artist, :count).by(-1)
end
Комментарии / другие мысли
Как уже упоминалось в комментариях в спецификации пользователя, использование Artist кажется хрупким. Что, если мои заводы изменятся в будущем?
Может быть, я должен использовать обратные вызовы factory_girl и определить «пользователь исполнителя» и «пользователь музыканта»? Весь вклад приветствуется.