Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Loading FG into Rails console #638

Closed
bbozo opened this issue Mar 26, 2014 · 3 comments
Closed

Loading FG into Rails console #638

bbozo opened this issue Mar 26, 2014 · 3 comments

Comments

@bbozo
Copy link

bbozo commented Mar 26, 2014

Loading/reloading factories from Pry under Rails 4.1 with recent versions of FG results in a warning and FactoryGirl::DuplicateDefinitionError exception:

[1] pry(main)> require 'factory_girl_rails'; reload!; FactoryGirl.factories.clear; FactoryGirl.find_definitions
Warning: you should require 'minitest/autorun' instead.
Warning: or add 'gem "minitest"' before 'require "minitest/autorun"'
From:
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `require'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `block in require'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:232:in `load_dependency'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `require'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/minitest-5.3.1/lib/minitest/spec.rb:3:in `<top (required)>'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `require'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `block in require'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:232:in `load_dependency'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `require'
  /home/bbozo/dev/eWallet3k/test/factories.rb:1:in `<top (required)>'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:241:in `load'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:241:in `block in load'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:232:in `load_dependency'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:241:in `load'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/factory_girl-4.4.0/lib/factory_girl/find_definitions.rb:16:in `block in find_definitions'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/factory_girl-4.4.0/lib/factory_girl/find_definitions.rb:15:in `each'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/factory_girl-4.4.0/lib/factory_girl/find_definitions.rb:15:in `find_definitions'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/factory_girl_rails-4.4.1/lib/factory_girl_rails/railtie.rb:21:in `block in <class:Railtie>'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/lazy_load_hooks.rb:36:in `call'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/lazy_load_hooks.rb:28:in `block in on_load'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/lazy_load_hooks.rb:27:in `each'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/lazy_load_hooks.rb:27:in `on_load'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/railties-4.1.0.rc1/lib/rails/railtie/configuration.rb:69:in `after_initialize'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/factory_girl_rails-4.4.1/lib/factory_girl_rails/railtie.rb:20:in `<class:Railtie>'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/factory_girl_rails-4.4.1/lib/factory_girl_rails/railtie.rb:6:in `<module:FactoryGirl>'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/factory_girl_rails-4.4.1/lib/factory_girl_rails/railtie.rb:5:in `<top (required)>'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `require'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `block in require'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:232:in `load_dependency'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `require'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/factory_girl_rails-4.4.1/lib/factory_girl_rails.rb:1:in `<top (required)>'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `require'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `block in require'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:232:in `load_dependency'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `require'
  (pry):1:in `<main>'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-0.9.12.6/lib/pry/pry_instance.rb:328:in `eval'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-0.9.12.6/lib/pry/pry_instance.rb:328:in `evaluate_ruby'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-0.9.12.6/lib/pry/pry_instance.rb:278:in `re'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-0.9.12.6/lib/pry/pry_instance.rb:254:in `rep'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-0.9.12.6/lib/pry/pry_instance.rb:234:in `block (3 levels) in repl'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-0.9.12.6/lib/pry/pry_instance.rb:232:in `loop'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-0.9.12.6/lib/pry/pry_instance.rb:232:in `block (2 levels) in repl'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-0.9.12.6/lib/pry/pry_instance.rb:231:in `catch'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-0.9.12.6/lib/pry/pry_instance.rb:231:in `block in repl'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-0.9.12.6/lib/pry/pry_instance.rb:230:in `catch'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-0.9.12.6/lib/pry/pry_instance.rb:230:in `repl'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-0.9.12.6/lib/pry/pry_class.rb:169:in `start'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/pry-nav-0.2.3/lib/pry-nav/pry_ext.rb:17:in `start_with_pry_nav'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/railties-4.1.0.rc1/lib/rails/commands/console.rb:90:in `start'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/railties-4.1.0.rc1/lib/rails/commands/console.rb:9:in `start'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/railties-4.1.0.rc1/lib/rails/commands/commands_tasks.rb:69:in `console'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/railties-4.1.0.rc1/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/railties-4.1.0.rc1/lib/rails/commands.rb:17:in `<top (required)>'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `require'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `block in require'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:232:in `load_dependency'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:247:in `require'
  /home/bbozo/dev/eWallet3k/bin/rails:8:in `<top (required)>'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:241:in `load'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:241:in `block in load'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:232:in `load_dependency'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/activesupport-4.1.0.rc1/lib/active_support/dependencies.rb:241:in `load'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/commands/rails.rb:6:in `call'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/command_wrapper.rb:38:in `call'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/application.rb:180:in `block in serve'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/application.rb:153:in `fork'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/application.rb:153:in `serve'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/application.rb:128:in `block in run'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/application.rb:122:in `loop'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/application.rb:122:in `run'
  /home/bbozo/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/application/boot.rb:18:in `<top (required)>'
  -e:1:in `<main>'
Reloading...
FactoryGirl::DuplicateDefinitionError: Sequence already registered: imei
from /home/bbozo/.rvm/gems/ruby-2.1.1/gems/factory_girl-4.4.0/lib/factory_girl/decorator.rb:10:in `method_missing'

Wrapping the sequence-generating code into a simple rescue block resolves the issue for factories (afaik not sequences too):

  begin
    sequence :a_sequence do |n|
      n
    end
    sequence :another_sequence do |n|
      n*2
    end
  rescue FactoryGirl::DuplicateDefinitionError => e
    warn "#{e.message}"
  end

Gemfile.lock snippet:

    factory_girl_rails (4.4.1)
      factory_girl (~> 4.4.0)
      railties (>= 3.0.0)

Is there an alternate way to reload factories from the console? I guess many people use this process for stubbing default values into the DB/seeding etc and I use it to test factories

@joshuaclayton
Copy link
Contributor

@bbozo Can you try FactoryGirl.reload instead of FactoryGirl.find_definitions and let me know what happens?

@joshuaclayton
Copy link
Contributor

Closing due to inactivity; @bbozo if you have any more context or are still running into this, don't hesitate to reopen. Thanks!

@alexanderadam
Copy link

alexanderadam commented Sep 9, 2019

Running into the same issue now.
I want to use factory definitions from a gem, which is why extend the definition_file_paths, clear everything and try to find the definitions (or reload — both result in that error):

require 'factory_bot_rails'

FactoryBot.definition_file_paths = [
  File.join(Gem::Specification.find_by_name('alchemy_cms').gem_dir, 'lib', 'alchemy', 'test_support', 'factories'),
  Rails.root.join('spec', 'factories')
]

FactoryBot.factories.clear

FactoryBot.find_definitions
# or FactoryBot.reload

This results into the FactoryBot::DuplicateDefinitionError

with FactoryBot.find_definitions:

An error occurred while loading ./…/…/…_spec.rb.
Failure/Error: FactoryBot.find_definitions

FactoryBot::DuplicateDefinitionError:
  Factory already registered: alchemy_attachment

with FactoryBot.reload:

An error occurred while loading ./…/…/…_spec.rb.
Failure/Error: FactoryBot.reload

FactoryBot::DuplicateDefinitionError:
  Factory already registered: alchemy_attachment

PS: You might also want to know that this old issue lead to a popular stackoverflow thread.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants