La conception
J'ai un modèle d'utilisateur qui appartient à un profil par le biais d'une association polymorphe. La raison pour laquelle j'ai choisi cette conception peut être trouvée aquí . En résumé, il y a de nombreux utilisateurs de l'application qui ont des profils très différents.
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
Après avoir choisi ce modèle, j'ai du mal à trouver de bons tests. En utilisant FactoryGirl et RSpec, je ne sais pas comment déclarer l'association de la manière la plus efficace.
Première tentative
usines.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
Commentaires / autres réflexions
Comme mentionné dans les commentaires de la spécification de l'utilisateur, l'utilisation d'Artist semble fragile. Que se passera-t-il si mes usines changent à l'avenir ?
Je devrais peut-être utiliser callbacks factory_girl et définir un "utilisateur artiste" et un "utilisateur musicien" ? Tous les commentaires sont les bienvenus.