J'ai une série de modèles pour lesquels j'ai défini des usines. J'ai aussi un modèle basé sur l'API qui sous-classe ActiveResource::Base
, que je (apparemment) ne peut pas construire à partir d'une usine - Je reçois une exception lorsque Factory Girl appelle FooAPI.new
. J'ai plutôt défini une classe Foo
dans test/lib
. Ce que je voudrais faire dans mon test est de voir si une usine existe pour un symbole donné (par exemple :foo
, :bar
, etc.), puis de revenir à la tentative de construire directement un objet de la classe appropriée, en utilisant String#classify.constantize
. Voici mon implémentation actuelle maladroites:Puis-je demander à Factory Girl si une usine existe?
objects[name] = begin
klass = name.to_s.classify.constantize
klass.new
rescue
Factory.build name
end
Je préfère quelque chose comme ceci:
Factory.exists?(name) ? Factory.build(name) : name.to_s.classify.constantize.new
De cette façon, je me faisais une exception appropriée sur un défaut de construire un objet.
Mise à jour: Merci à fd, j'ai trouvé un moyen de le faire sans manipulation d'exception!
objects[name] = if Factory.factories.include?(name)
Factory.build name
else
klass = name.to_s.classify.constantize
klass.new
end
Hmm, qui ne semble pas fonctionner pour moi. Je reçois un 'NameError: constante non initialisée FooTest :: FactoryGirl' avec' FactoryGirl.find: foo' et une méthode 'NoMethodError: undefined' trouver 'pour Factory: Class' avec 'Factory.find: foo'. Je me demande si cela a à voir avec l'intégration de Rails? –
Je ne pense pas qu'il existe en 1.3, tout ce que je vois est 'Factory.factories [nom]' comme un équivalent. Semble un peu cru, probablement supprimé dans les versions ultérieures. –