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

时间:2011-03-14 12:11:21

标签: ruby-on-rails factory-bot

这是我的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

我发现这来自factory_girl的{​​{1}}方法。我尝试从spec_helper中自己调用它,但它没有改变任何东西。这是堆栈跟踪的一部分:

find_definitions

2 个答案:

答案 0 :(得分:26)

我认为问题与您工厂的装载有关。 只需在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

答案 1 :(得分:6)

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

  1. 来自getting started page。如果存在,工厂女孩应自动加载以下文件:

    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 name>错误。

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

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