Prevent factory / factory / factory / * files from loading. Rb files

In the rails project, I would like to put factory_girl plants in spec/support/factories/ instead of spec/factories/ (since later there are already specifications for factory classes).

Here is my spec_helper.rb :

 # This file is copied to spec/ when you run 'rails generate rspec:install' ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'rspec/autorun' require 'capybara/rails' require 'capybara/rspec' FactoryGirl.definition_file_paths = [File.join(Rails.root, 'spec', 'support', 'factories')] # FactoryGirl.factories.clear # FactoryGirl.reload # Requires supporting ruby files with custom matchers and macros, etc, # in spec/support/ and its subdirectories. Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} RSpec.configure do |config| config.include FactoryGirl::Syntax::Methods config.include AuthenticationHelper # ## Mock Framework # # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: # # config.mock_with :mocha # config.mock_with :flexmock # config.mock_with :rr # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures config.fixture_path = "#{::Rails.root}/spec/fixtures" # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false # instead of true. config.use_transactional_fixtures = true # If true, the base class of anonymous controllers will be inferred # automatically. This will be the default behavior in future versions of # rspec-rails. config.infer_base_class_for_anonymous_controllers = false # Run specs in random order to surface order dependencies. If you find an # order dependency and want to debug it, you can fix the order by providing # the seed, which is printed after each run. # --seed 1234 config.order = "random" end 

But when I run rspec , the files in spec/factories are still loaded twice (using both factory_girl and rspec ), which leads to duplication of test execution.

I do not think that FactoryGirl.factories.clear can help me, nor FactoryGirl.reload , since they will not prevent the tests from running.

Is it possible to simply prevent factory_girl from loading spec/factories/ ?

(Using ruby 1.9.3p327 , rails 3.2.9 , factory_girl 4.1.0 , factory_girl_rails 4.1.0 , rspec-core 2.12.2 and rspec-rails 2.12.0 )

+4
source share
1 answer

Create an initializer (any file in config/initializers , say config/initializers/factory_girl.rb ) with this line:

 FactoryGirl.definition_file_paths.delete(File.join(Rails.root, 'spec/factories')) 

Then remove the line FactoryGirl.definition_file_paths = ... from spec_helper.rb that you don't need.

See the definition_file_paths method for more details.

+2
source

All Articles