2013-01-02 39 views
4

rails項目中,我想將factory_girl工廠放在spec/support/factories/而不是spec/factories/(因爲後者已經包含「工廠」類的規格)。阻止factory_girl加載spec/factories/* .rb文件

這裏是我的spec_helper.rb

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 
require 'capybara/rails' 
require 'capybara/rspec' 

FactoryGirl.definition_file_paths = [File.join(Rails.root, 'spec', 'support', 'factories')] 
# FactoryGirl.factories.clear 
# FactoryGirl.reload 

# 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| 
    config.include FactoryGirl::Syntax::Methods 
    config.include AuthenticationHelper 
    # ## 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 

    # Run specs in random order to surface order dependencies. If you find an 
    # order dependency and want to debug it, you can fix the order by providing 
    # the seed, which is printed after each run. 
    #  --seed 1234 
    config.order = "random" 
end 

但是當我運行rspec,在spec/factories文件仍然得到加載兩次後(通過factory_girlrspec),導致重複的測試執行。

我不認爲FactoryGirl.factories.clear可以幫助我,既不FactoryGirl.reload,因爲他們不會阻止測試運行。

有什麼辦法可以防止factory_girl加載spec/factories/

(使用ruby 1.9.3p327rails 3.2.9factory_girl 4.1.0factory_girl_rails 4.1.0rspec-core 2.12.2rspec-rails 2.12.0

回答

2

創建初始化(在config/initializers的任何文件,說config/initializers/factory_girl.rb)這條線:

FactoryGirl.definition_file_paths.delete(File.join(Rails.root, 'spec/factories')) 

然後取出線FactoryGirl.definition_file_paths = ...來自spec_helper.rb的行,您不需要。

有關definition_file_paths方法的更多信息,請參閱documentation

+0

我更新了我的答案:您必須將此行放入初始化文件中,以便在加載'factory_girl'之前加載它。 –