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