2014-05-25 91 views
5

我试图用FactoryGirl rspec的运行,但我不断收到此错误引发ArgumentError:工厂未注册

1) Products Update with invalid information 
    Failure/Error: let(:product) { FactoryGirl.create(:product) } 
    ArgumentError: 
     Factory not registered: product 
    # ./spec/requests/products_spec.rb:47:in `block (3 levels) in <top (required)>' 
    # ./spec/requests/products_spec.rb:52:in `block (3 levels) in <top (required)>' 

-

这里的有错误的测试(规格/请求/ products_spec.rb):

describe "Read" do 
    let(:product) { FactoryGirl.create(:product) } 
    before { visit product_path(product) } 
    it { should have_text(product.title) } 
end 

-

这里的工厂(规格/ factories.rb):

FactoryGirl.define do 
    factory :product do 
     title "Lorem ipsum" 
     description "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce vitae ipsum consectetur, semper dolor sed, dignissim enim." 
     image_url "lorem.png" 
     price 9.95 
    end 
end 

-

重新启动服务器(带叉勺和卫队),并没有什么改变,但我可能不会重新启动叉勺/正确保护。

-

确实有需要我的规格/ spec_helper.rb 'factory_girl'。

-

这里是我的的Gemfile。需要注意的是我用我的Gemfile “factory_girl_rails”

source 'https://rubygems.org' 

gem 'rails', '4.1.1' 
gem 'sass-rails', '~> 4.0.3' 
gem 'uglifier', '>= 1.3.0' 
gem 'coffee-rails', '~> 4.0.0' 
gem 'jquery-rails' 
gem 'turbolinks' 
gem 'jbuilder', '~> 2.0' 
# gem 'bcrypt', '~> 3.1.7' 

group :development do 
    gem 'spring' 
    gem 'sqlite3', '1.3.8' 
    gem 'minitest' 
    gem 'rspec-rails', '2.13.1' 
    gem 'guard-rspec', '2.5.0' 
    gem 'spork-rails', '4.0.0' 
    gem 'guard-spork', '1.5.0' 
end 

group :test do 
    gem 'selenium-webdriver', '2.35.1' 
    gem 'capybara', '2.1.0' 
    gem 'growl', '1.0.3' 
    gem 'factory_girl_rails', '4.2.1' 
end 

group :production do 
    gem 'pg', '0.15.1' 
    gem 'rails_12factor', '0.0.2' 
end 

group :doc do 
    gem 'sdoc', '0.4.0', require: false 
end 

-

你能找出错误?

+0

也许在'RSpec.configure'块中添加'config.include FactoryGirl :: Syntax :: Methods'。但它应该工作没有这一般。 – zishe

+0

由于出现'spring',所以不需要spork,它完全取代它。 – zishe

+1

您是否尝试过创建** spec/factories/products.rb **工厂** – robzdc

回答

10

我在这里扔了一堆东西,所以很难说清楚确切的修复是什么。我做的一件事是在spec_helper.rb中将require 'factory_girl'切换为require 'factory_girl_rails',这似乎是最合理的解决方案。

此外,我将config.include FactoryGirl::Syntax::Methods添加到spec_helper.rb的Rspec.configure块,我认为这也很重要。

+6

我有同样的错误。在我的情况下,问题是我正在使用'factory_girl'。在Rails中使用的正确的gem是gemfile中的'factory_girl_rails'(例如'gem'factory_girl_rails','〜> 4.5.0',group:[:development,:test]'。RB)。 向'RSpec.configure'块添加'config.include FactoryGirl :: Syntax :: Methods'可能与您的问题没有任何关系:此行的目的是允许创建一个对象而无需引用'FactoryGirl'(即'create(:product)'而不是'FactoryGirl.create(:product)') –

0

如果您的工厂定义错误,也会生成“ArgumentError:Factory not registered”(工厂未注册)。您的工厂定义可能被称为phases.rb,但定义应为:factory :phase do(单数)。