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 
Était-ce utile?

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 ".

Dans le cas où vous avez eu ce problème avec Ruby 1.9.2, besoin attend le chemin élargi.

File.expand_path("test/factories.rb")

résolu mon problème. Je viens d'envoyer une demande de traction. Après cela, vous pouvez ajouter à votre test_helper.rb:

require 'factory_girl'
FactoryGirl.find_definitions

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

Intéressant

. 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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top