Configuration Factory Girl avec Test :: Unit et Shoulda
-
18-09-2019 - |
Question
Je suis en train de mettre en place Factory Girl avec Test :: Unit et Shoulda en Ruby on Rails. J'ai installé la pierre précieuse, créé mon dossier d'usine dans le répertoire test / usines et créé mon fichier de spécification dans le répertoire test / modèles. L'erreur actuelle je reçois est « ArgumentError: Aucun usine: test », ce qui me porte à croire que le fichier test_factory.rb n'est pas chargé? Toute idée de ce que je devrais changer?
Voici mes fichiers.
#test/factories/test_factory.rb
Factory.define :test do |t|
t.name 'test_spotlight'
t.label 'test spotlight label'
end
et
#test/modes/test_spec.rb
require 'test_helper'
require 'factory_girl'
class TestTest < Test::Unit::TestCase
def setup
@test = Factory.build(:test)
end
context "A test" do
should "save with the minimum requirements" do
assert @test.save
end
end
end
La solution
J'ai rencontré ce problème sur l'un de mes projets aussi. Je ne sais pas exactement ce qui cause le code d'initialisation à sauter mais vous pouvez forcer charger les définitions d'usine comme ceci:
require 'factory_girl'
Factory.find_definitions
Hope this helps.
Autres conseils
Essayez de mettre cela en test_helper.rb:
require 'factory_girl'
Dir.glob(File.dirname(__FILE__) + "/factories/*").each do |factory|
require factory
end
Juste découvert factory_girl_rails, où il dit que le chargement automatique est la seule chose supplémentaire, il a https://github.com/ thoughtbot / factory_girl_rails
J'ai eu le même problème. Finalement, je fait faire en mettant toutes mes usines dans « /test/factories.rb » et écrit les lignes suivantes dans mon fichier « /test/test_helper.rb »:
require 'factory_girl'
require File.dirname(__FILE__) + "/factories"
vous pouvez faire la même chose pour les fichiers multiples en exigeant dans le test_helper. Je ne l'ai pas encore compris pourquoi l'auto-include qui est mentionné dans le readme « de factory_girl » ne se produit pas.
J'ai aussi réussi à se débarrasser de ce problème en mettant cette ligne dans mon environment.rb:
config.gem "factory_girl", :source => "http://gemcutter.org"
Assurez-vous également que vous avez le dernier bijou:
Changement de nom de "thoughtbot-factory_girl" à "factory_girl" source changé de « http: //gems.github. com » à " http://gemcutter.org ".
Si je ne est nécessaire que « factory_girl » dans test_helper.rb, j'obtenir le même comportement que vous avez mentionné, mais si je l'ai besoin dans ma config / test / environment.rb (notez que j'utilise environnementaliste ), il trouverait bien la définition de l'usine sans aucun problème.
J'ai essayé après avoir lu la fille de l'usine rdoc où il est dit de mettre config.gem dans votre environnement.
J'ai aussi rencontré le problème - après la mise à jour factorygirl 1.3.2 -. Que les usines de test / usines ne sont pas chargés automatiquement plus
Je pourrais me débarrasser du problème en ajoutant le code de test_helper.rb en dg:
Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory|
require factory
end
Lors de l'exécution de tests individuels dans TextMate, tout a bien fonctionné, mais en cours d'exécution par exemple tous les tests unitaires de la ligne de commande en utilisant le test de coupe: les appareils défectueux avec un DuplicateDefinitionError (je lis qu'il a probablement quelque chose à voir avec 1.8.x rubis). Donc, je légèrement changé le code:
if (!Factory.factories || Factory.factories.empty?)
Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory|
require factory
end
end
Avez-vous essayé de déplacer la balise
require 'factory_girl'
à votre test / test_helper.rb
Le mécanisme de chargement automatique usine peut dépendre de l'endroit où l'require est appelée. Il pourrait essayer de trouver des usines * test / modèles / usines / ** * au lieu de test / usines / **
Au lieu de nommer votre fichier usine test_factory.rb, essayez de le nommer factory.rb
. J'ai eu un problème similaire en essayant d'obtenir le concombre à travailler avec factory_girl. J'avais initialement configuré factory_girl à rechercher ( « config.gem ») mais pas chargé dans l'environnement de concombre et entièrement nécessaire dans « caractéristiques / support / env.rb », même que le concombre fait pour Webrat, etc. Cela n'a commencé à travailler quand je dis explicitement factory_girl de trouver ses définitions comme Kenny a suggéré ci-dessus.
Quand j'ai enlevé la déclaration de besoin env.rb et factory_girl entièrement nécessaire dans l'environnement de concombre, l'effet est parti et factory_girl a travaillé hors de la boîte.
Il semble vraiment être une question de savoir quand (ou dans quel contexte) factory_girl obtient chargé.
Étant donné que différentes personnes utilisent différentes versions de Rails (2.x et 3.x étant le plus commun maintenant), il est important d'inclure les autres éléments pertinents de votre environnement (la plus importante étant la version de Rails vous » re sur). De la factory_girl page Web, la version 1.3.0 documentation (http://rubydoc.info/gems/factory_girl/1.3.0/frames):
Si vous voulez utiliser factory_girl avec Rails 3, utilisez la factory_girl_rails bijou, pas celui-ci.
Si vous souhaitez utiliser factory_girl avec les versions Rails avant Rails 3, utiliser la version 1.2.4.
Si vous rencontrez des problèmes avec le chargement, je vous suggère de faire en sorte que vous utilisez la bonne version. Les versions de factory_girl supérieure à 1.2.4, je suppose, sont amenés comme des dépendances pour les « factory_girl_rails » (Rails 3.0+) gemme.
J'ai ajouté
require 'factory_girl'
require File.dirname(FILE) + "/factories"
à spec_helper.rb whiche aidé, mais je Rememberd Spork peut parfois ba un peu d'un problème, donc je redémarré Spork sans require
puis il a bien fonctionné.