Дублированная заводская ошибка с rspec и заводской девушкой? - PullRequest
7 голосов
/ 26 февраля 2012

Я пытаюсь сбросить «последовательность» на заводской девушке между каждым выполненным тестом.

(factory_girl 2.6.0 и factory_girl_rails 1.7.0)

Я думаю, что для этого,Я должен перезагрузить определения FactoryGirl.Я делаю это в последних строках 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

Добавление:

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

При выполнении 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>
* приводит к следующей ошибке1016 * Это похоже на дублированную заводскую ошибку, может быть, он пытается загрузить заводскую девушку дважды, но я не понимаю, почему.

1 Ответ

11 голосов
/ 26 февраля 2012

Он пытается загрузить все ваши фабрики дважды, потому что вы просите об этом. Замените ваш звонок на find_definitions на

FactoryGirl.reload

, который очищает существующие фабрики, последовательности и т. Д., А затем вызывает find_definitions для вас

...