Ruby on rails 无法使factory_girl在rails 3.0.5下运行,意外的t常量

Ruby on rails 无法使factory_girl在rails 3.0.5下运行,意外的t常量,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,这是我的文件配置: 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\u helper.rb

这是我的文件配置:

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\u 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.rb
文件:

需要文件。展开\u路径(File.dirname(File)+“../../spec\u helper”)

当我使用rake spec:models运行测试时,我得到以下结果:

spec/factories/factories.rb:1: syntax error, unexpected tCONSTANT, expecting $end
我发现这源于
factory\u girl
find\u definitions
方法。我试着自己从spec_助手中调用它,但它没有改变任何事情。以下是堆栈跟踪的一部分:

** 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

我也有同样的问题,但事实证明我只是把我的文件命名错了(factories.rb.rb,多亏了Netbeans)。不过,我发现了一些对本页有用的东西

  • 从。Factory girl应自动加载以下文件(如果存在):

    test/factories.rb
    spec/factories.rb
    test/factories/*.rb
    spec/factories/*.rb
    
    将以下内容放入test_helper.rb会导致双重加载:

    需要“工厂女孩” Factory.find_定义

    这导致我得到一个
    `add_as':已定义:
    错误

  • factory\u girl\u rails gem自动加载factory\u girl。这是不必要的,但似乎没有任何副作用

  • 我发现FactoryGirl的语法自2011年3月第一次学习以来已经发生了很大的变化。我强烈建议大家查看入门页面,看看其中的一些变化


  • 注释第一行(需要'spec_helper')并尝试它。有一些进展,测试开始运行,但在该行说:
    u=Factory(:user)。create
    它抛出一个ArgumentError,
    Not registed:user
    ,exception.u=Factory(:user)行仅为您创建用户如果我从行中删除
    。create
    ,则会出现相同的异常。只需删除factory文件夹,并将您的factory文件保留在spec文件夹中,然后对其进行测试。如果它工作,那么你的问题与加载有关。是的,它与加载有关。在spec dir中移动工厂文件解决了问题。顺便说一句,将factory.find_定义更改为FactoryGirl.find_定义factory已被弃用刚刚完成,我收到一条消息将factory.find_定义更改为FactoryGirl.find_定义。
    test/factories.rb
    spec/factories.rb
    test/factories/*.rb
    spec/factories/*.rb