Duplicate factory error with rspec and factory girl?

I am trying to reset the "sequence" in a factory girl between each run of the test.

( factory_girl 2.6.0 and factory_girl_rails 1.7.0 )

I think for this I need to reload FactoryGirl definitions. I do this in the last lines of spec_helper.rb:

 require 'rubygems' require 'spork' #uncomment the following line to use spork with the debugger #require 'spork/ext/ruby-debug' Spork.prefork do ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'rspec/autorun' require 'capybara/rspec' require "rails/application" Spork.trap_method(Rails::Application::RoutesReloader, :reload!) Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} RSpec.configure do |config| config.mock_with :rspec require 'database_cleaner' config.before(:suite) do DatabaseCleaner.strategy = :transaction DatabaseCleaner.clean_with(:truncation) end config.before(:each) do DatabaseCleaner.start end config.after(:each) do DatabaseCleaner.clean end config.infer_base_class_for_anonymous_controllers = false # For mailer config.include(MailerMacros) config.before(:each) {reset_email} end end Spork.each_run do # This code will be run each time you run your specs. I18n.backend.reload! Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } require 'factory_girl' FactoryGirl.definition_file_paths = [File.join(Rails.root, 'spec', 'factories')] FactoryGirl.find_definitions end 

Addendum:

  FactoryGirl.definition_file_paths = [File.join(Rails.root, 'spec', 'factories')] FactoryGirl.find_definitions 

Leads me to the following error when running rspec spec/

 โ†’ bundle exec guard Guard uses Growl to send notifications. Guard is now watching at '/Rails/projects/MyRailsProject' Starting Spork for RSpec Using RSpec Preloading Rails environment Loading Spork.prefork block... Spork is ready and listening on 8989! Spork server for RSpec successfully started Guard::RSpec is running, with RSpec 2! Running all specs Exception encountered: #<FactoryGirl::DuplicateDefinitionError: Factory already registered: user> 

This seems to be a duplicate factory error, maybe it is trying to load the factory girl twice, but I donโ€™t understand why.

+6
source share
1 answer

He tries to load all your factories twice because you ask for it. Replace the call to find_definitions with

 FactoryGirl.reload 

which cleans up existing factories, sequences, etc., and then calls find_definitions for you

+10
source

Source: https://habr.com/ru/post/909394/


All Articles