web-dev-qa-db-fra.com

ArgumentError: usine non enregistrée

J'essaie de faire fonctionner Factory Girl avec rspec dans mon Rails 4.1.1 app.

Le problème est que lorsque j'exécute rspec dans ma ligne de commande, j'obtiens Failure/Error: verse = build(:verse) ArgumentError: Factory not registered: verse.

Je suis perdu parce que j'ai vérifié la page de démarrage de Factory Girl et de nombreuses réponses ici sur SO et je ne peux toujours pas résoudre ce problème.

dans mon Gemfile:

gem 'Rails', '4.1.1'
group :development, :test do
  gem 'rspec-Rails'
  gem "factory_girl_Rails"
end

mon fichier spec_helper.rb:

require 'factory_girl_Rails'
RSpec.configure do |config|
  config.include FactoryGirl::Syntax::Methods
end

spec/controllers/api/verses_controller_spec.rb

describe "API Controller" do
  describe "show a verse" do
    it "should return status 200" do
      verse = build(:verse)
      get :show, id: verse.id
      expect(response).to have_http_status(200)
    end
    it "should return json object" do
      verse = build(:verse)
      get :show, id: verse.id
      JSON.parse(response.body).should == {'id' => verse.id}
    end
  end
end

spec/usines/verses.rb

FactoryGirl.define do
  factory :verse do
    line1 "A beautiful verse I stand"
  end
end

Pourquoi mon usine ne se charge-t-elle pas correctement? Les fichiers du dossier spec/factories sont censés être chargés automatiquement.

26
fkoessler

Il semble y avoir un problème lors de l'utilisation de rspec/factory girl avec ressort.

Ajouter:

config.before(:all) do
  FactoryGirl.reload
end

dans mon spec_helper.rb a résolu le problème.

Crédit: https://github.com/Rails/spring/issues/88

Éditer:

Une autre façon de résoudre le problème consiste à indiquer manuellement à Factory Girl où charger l'usine. Ajoutez ceci dans votre spec_helper:

FactoryGirl.definition_file_paths = [File.expand_path('../factories', __FILE__)]
FactoryGirl.find_definitions
49
fkoessler

Cela semble être n problème avec Factory Bot . Je l'ai corrigé (selon le rapport de problème) avec FactoryBot.find_definitions:

RSpec.configure do |config|
  config.include FactoryBot::Syntax::Methods

  config.before do
    FactoryBot.find_definitions
  end
end
12
David Moles

Ce n'est pas nécessairement dû au printemps. Il y a un problème qui signifie que factory_girl charge les chemins légèrement différents de rspec. La solution consiste à ajouter à Rails_helper les éléments suivants

FactoryGirl.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
FactoryGirl.find_definitions

en supposant que l'aide est à engine_root/spec.

Cela se produit lorsque vous utilisez rspec dans un moteur Rails.

5
Obromios