2012-02-26 28 views
6

Çalıştığım her bir test arasında fabrika kızındaki "sıralamayı" sıfırlamaya çalışıyorum.rspec ve fabrika kızıyla yinelenen fabrika hatası mı?

(factory_girl 2.6.0 ve factory_girl_rails 1.7.0) Ben FactoryGirl tanımlarını tekrar yüklemek zorunda, o bunu düşünüyorum. Bir çoğaltılamaz gibi görünüyor 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> 

çalıştırırken

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

aşağıdaki hata beni Leads: Ekleme

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 

: Ben spec_helper.rb son satırlarında bunu fabrika hatası, belki fabrika kızını iki kez yüklemeye çalışıyor, ama nedenini anlamıyorum.

cevap

10

Tüm fabrikalarınızı iki kez yüklemeye çalışıyorsunuz çünkü bunu sizden istiyorsunuz. Eğer

için find_definitions çağrı ardından

FactoryGirl.reload 
vb mevcut fabrikalar, dizileri temizlemek

ile find_definitions için çağrı değiştirin