Factory already registered: user (FactoryGirl::DuplicateDefinitionError)

后端 未结 27 2184
我在风中等你
我在风中等你 2021-02-06 21:18

Description of problem: - I\'ve setup factory_girl_rails however whenever I try and load a factory it\'s trying to load it multiple times.

Envir         


        
相关标签:
27条回答
  • 2021-02-06 21:28

    I had this problem too. In my case there were two files with the same code, like this:

    FactoryGirl.define do
      factory :user do
      end
    end
    

    One file was named "Useres.rb" and the other "User.rb" so I just deleted "Useres.rb" and fixed the error.

    0 讨论(0)
  • 2021-02-06 21:29

    Please try following these steps

    1) I looked for all occurrences of "factory_girl" from my RAILS_ROOT:

    find . -name "*.rb" | xargs grep "factory_girl"

    2) Because this was a full engine plugin "app" that I created via "rails plugin new --mountable", I had a file under RAILS_ROOT//lib/ called "engine.rb". It had:

    config.generators do |g|
      g.test_framework      :rspec,        :fixture => false
      g.fixture_replacement :factory_girl, :dir => 'spec/factories'
      g.assets false
      g.helper false
    end
    

    3) I also had the following in my spec_helper.rb file:

    Dir["#{File.dirname(FILE)}/factories/*/.rb"].each { |f| require f }

    4) the g.fixture_replacement line in engine.rb and the Dir line in spec_helper.rb were initializing the factories twice. I commented out the one from spec_helper.rb and that fixed the problem.

    Alternatively, you can leave in spec_helper.rb and comment out in engine.rb.

    Both fixed the problem in my case.

    0 讨论(0)
  • 2021-02-06 21:29

    Check to see if you added factories through the model generator. My generator made a model and I added one to my main factory.rb file. Deleting the automatically generated ones worked for me.

    0 讨论(0)
  • 2021-02-06 21:30

    I also ran with the same issue and commenting out a single line in spec_helper.rb file solved my problem.

    Try commenting out this line from spec_helper.rb file and you should be good.

    Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
    
    0 讨论(0)
  • 2021-02-06 21:32

    https://github.com/thoughtbot/factory_girl/issues/638


    Loading factory girl into a development console will do this too:

    require 'factory_girl_rails'; reload!; FactoryGirl.factories.clear; FactoryGirl.find_definitions
    

    will raise a FactoryGirl::DuplicateDefinitionError on a sequence under Factory Girl v4.4.0.

    It seems the sequences get handled differently within FG and simply wrapping all sequences in a rescue block will solve the issue.

    For example:

      begin
        sequence :a_sequence do |n|
          n
        end
        sequence :another_sequence do |n|
          n*2
        end
      rescue FactoryGirl::DuplicateDefinitionError => e
        warn "#{e.message}"
      end
    
    0 讨论(0)
  • 2021-02-06 21:32

    I had the same problem- make sure you aren't loading FactoryGirl a second time in your spec/support/env.rb file.

    0 讨论(0)
提交回复
热议问题