我正试图在我运行的每个测试之间重置工厂女孩的“序列”.
(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,'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>
这似乎是一个重复的工厂错误,也许它试图加载工厂女孩两次,但我不明白为什么.