Rails 4中的“Factory not registered”错误

我在Rails 4中使用Factory Girl获得了“Factory not registered”错误。这是我在spec / factories / user.rb中为一个简单的Devise用户定义的工厂:

FactoryGirl.define do factory :user do email 'test@example.com' password 'foobar' password_confirmation 'foobar' end end 

这是spec_helper.rb:

 ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'email_spec' require 'rspec/autorun' require 'factory_girl' Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration) RSpec.configure do |config| config.include(EmailSpec::Helpers) config.include(EmailSpec::Matchers) config.fixture_path = "#{::Rails.root}/spec/fixtures" config.use_transactional_fixtures = true config.infer_base_class_for_anonymous_controllers = false config.order = "random" config.include Devise::TestHelpers, :type => :controller config.include FactoryGirl::Syntax::Methods config.before(:suite) do DatabaseCleaner.strategy = :truncation end config.before(:each) do DatabaseCleaner.start end config.after(:each) do DatabaseCleaner.clean end end 

并在gem文件中:

 gem 'factory_girl_rails', :require => false 

这是spec / models / user_spec.rb中的测试:

 require 'spec_helper' describe User do it "has a valid factory" do FactoryGirl.build(:user).should be_valid end end 

这失败了,说’工厂未注册:用户’。 我已经尝试将Factory定义移动到spec / factories.rb,以及只使用factory_girl而不是factory_girl_rails,没有运气。 任何建议将不胜感激。

你需要factory_girl而不是factory_girl_rails 。 将spec_helper.rb的等效行编辑为:

 require 'factory_girl_rails'