无法让factory_girl在rails 3.0.5下运行,意外的tCONSTANT

这是我的Gemfile配置:

group :development, :test do gem 'rspec-rails' gem 'factory_girl', '~>2.0.0.beta1' gem 'factory_girl_rails', :git => 'https://github.com/thoughtbot/factory_girl_rails.git', :tag => 'v1.1.beta1' end 

这是我的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 "factory_girl" # 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} Dir[Rails.root.join("spec/factories/**/*.rb")].each {|f| require f} 

我将factories文件夹添加到LOAD_PATH,因为我想将它们保存在一个单独的文件夹中。

这是我的factories.rb文件:

需要File.expand_path(File.dirname( FILE )+’.. / .. / spec_helper’)

 Factory.define(:user) do |f| f.country("China") ... other attributes here end 

当我运行测试时,使用rake spec:models ,我得到了这个:

 spec/factories/factories.rb:1: syntax error, unexpected tCONSTANT, expecting $end 

我看到这来自于find_definitions方法。 我尝试从spec_helper中自己调用它,但它没有改变任何东西。 这是堆栈跟踪的一部分:

 ** Invoke spec:models (first_time) ** Invoke db:test:prepare (first_time) ** Invoke db:abort_if_pending_migrations (first_time) ** Invoke environment (first_time) ** Execute environment rake aborted! C:/rails/rcproj/spec/factories/factories.rb:1: syntax error, unexpected tCONSTANT, expecting $end f.count...er) do |f| ^ C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.5/lib/active_support/dependencies.rb:239:in `req uire' C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.5/lib/active_support/dependencies.rb:239:in `req uire' C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.5/lib/active_support/dependencies.rb:225:in `loa d_dependency' C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.5/lib/active_support/dependencies.rb:596:in `new _constants_in' C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.5/lib/active_support/dependencies.rb:225:in `loa d_dependency' C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.5/lib/active_support/dependencies.rb:239:in `req uire' C:/Ruby187/lib/ruby/gems/1.8/gems/factory_girl-2.0.0.beta2/lib/factory_girl/find_definitions.rb:20:i n `find_definitions' C:/Ruby187/lib/ruby/gems/1.8/gems/factory_girl-2.0.0.beta2/lib/factory_girl/find_definitions.rb:19:i n `each' C:/Ruby187/lib/ruby/gems/1.8/gems/factory_girl-2.0.0.beta2/lib/factory_girl/find_definitions.rb:19:i 

我认为问题与你工厂的装载有关。 只需在test_helper.rb文件中写下这个

  require 'factory_girl' Dir.glob(File.dirname(__FILE__) + "/factories/*").each do |factory| require factory end OR require 'factory_girl' FactoryGirl.find_definitions 

我有同样的问题,但事实certificate我只是将我的文件命名为错误(factories.rb.rb,感谢Netbeans)。 不过,我发现了一些对这个页面有用的东西。

  1. 从入门页面 。 Factory girl应该自动加载以下文件(如果存在):

     test/factories.rb spec/factories.rb test/factories/*.rb spec/factories/*.rb 

    将以下内容放在test_helper.rb中会导致双重加载:

    要求’factory_girl’Factory.find_definitions

    这导致我得到一个`add_as': Already defined: 错误。

  2. factory_girl_rails gem会自动加载factory_girl。 这是不必要的,但似乎没有任何副作用。

  3. 我发现自2011年3月我第一次学习它以来,FactoryGirl的语法发生了很大变化。我强烈建议所有人查看入门页面以查看一些更改。