2014-05-25 105 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(單數)。