Фабрика уже зарегистрирована: пользователь (FactoryGirl :: DuplicateDefinitionError) - PullRequest
42 голосов
/ 15 февраля 2012

Описание проблемы: - Я настроил factory_girl_rails, однако всякий раз, когда я пытаюсь загрузить завод, он пытается загрузить его несколько раз.

Environment:
- rails (3.2.1)
- factory_girl (2.5.2)
- factory_girl_rails (1.6.0)
- ruby-1.9.3-p0 [ x86_64 ]

> rake spec --trace
** Execute environment
-- Creating User Factory
-- Creating User Factory
rake aborted!
Factory already registered: user

Единственное, что я делаю 'Мы изменили: /config/initializers/generator.rb

Rails.application.config.generators do |g|
  g.test_framework = :rspec
  g.fixture_replacement :factory_girl
end

GEMFILE

gem 'rails', '3.2.1'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
gem 'devise'
gem 'haml-rails'

group :development do
  gem 'hpricot'
  gem 'ruby_parser'
  gem "rspec-rails"
end

group :test do
  gem "rspec"
  gem 'factory_girl_rails'
end

gem 'refinerycms-core',       :git => 'git://github.com/resolve/refinerycms.git'
gem 'refinerycms-dashboard',  :git => 'git://github.com/resolve/refinerycms.git'
gem 'refinerycms-images',     :git => 'git://github.com/resolve/refinerycms.git'
gem 'refinerycms-pages',      :git => 'git://github.com/resolve/refinerycms.git'
gem 'refinerycms-resources',  :git => 'git://github.com/resolve/refinerycms.git'
gem 'refinerycms-settings',   :git => 'git://github.com/resolve/refinerycms.git'

group :development, :test do
  gem 'refinerycms-testing',  :git => 'git://github.com/resolve/refinerycms.git'
end

gem 'refinerycms-inventories', :path => 'vendor/engines'

FactoryGirl.define do
  factory :role do
    title "MyString"
  end
end

Это проблема совместимости / среды, которую я могу 'Кажется, не могу понять.Любые предложения?

РЕДАКТИРОВАТЬ : вот мой spec / spec_helper.rb:

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
#require 'factory_girl_rails'

# 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|
### 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
end

Ответы [ 27 ]

0 голосов
/ 21 января 2014

Проверьте, добавили ли вы фабрики через генератор моделей.Мой генератор сделал модель, и я добавил ее в свой основной файл factory.rb.Удаление автоматически сгенерированных работало для меня.

0 голосов
/ 19 октября 2012

Я только что обнаружил, что получаю этот ответ при случайном звонке cucumber features. Когда я только что позвонил cucumber, проблема ушла.

0 голосов
/ 19 января 2018

Я решил это, удалив spec/factories/xxx.rb из командной строки:

rspec spec/factories/xxx.rb spec/model/xxx.rb # before
rspec spec/model/xxx.rb # after
0 голосов
/ 09 октября 2017

Самое странное, я получил эту ошибку со следующей синтаксической ошибкой в ​​коде:

before_validation :generate_reference, :on: :create

:on: вызывал эту ошибку.Как или почему так и останется загадкой.

0 голосов
/ 15 января 2014

Замените драгоценный камень для проверки рафинадного завода на rspec-rails и factory_girl_rails

0 голосов
/ 27 августа 2018

для меня эта проблема возникала, потому что использовались оба драгоценных камня

gem 'factory_bot_rails'
gem 'factory_girl_rails'

, чтобы решить, я удалил gem 'factory_bot_rails' из файла gem. а также добавил require 'factory_girl' в spec/factories/track.rb файл.

if Rails.env.test?
    require 'factory_girl'
    FactoryGirl.define do
      factory :track do
            id 1
            name "nurburgring"
            surface_type "snow"
            time_zone "CET"
       end
    end

Надеюсь, это поможет.

0 голосов
/ 18 сентября 2013

Я также столкнулся с той же проблемой, и закомментирование одной строки в файле spec_helper.rb решило мою проблему

Попробуйте закомментировать эту строку из файла spec_helper.rb, и все будет хорошо.

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
...