无法让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)。 不过,我发现了一些对这个页面有用的东西。
-
从入门页面 。 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:
错误。 -
factory_girl_rails gem会自动加载factory_girl。 这是不必要的,但似乎没有任何副作用。
-
我发现自2011年3月我第一次学习它以来,FactoryGirl的语法发生了很大变化。我强烈建议所有人查看入门页面以查看一些更改。