2014-05-25 11 views
5
registriert

Ich versuche rspec mit factory zu laufen, aber Ich erhalte diesen Fehler:Argument: Fabrik nicht

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)>' 

-

Hier ist der Test mit dem Fehler (spec/Anfragen/products_spec.rb):

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

-

Hier die Fabrik (spec/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 

-

I den Server neu gestartet (mit Spork und Schutz) und nichts geändert, obwohl ich nicht Spork Neustart werden kann/Wache richtig.

-

ich haben require 'factory_girl' in meiner spec/spec_helper.rb.

-

Hier ist meine Gemfile. Beachten Sie, dass I "factory_girl_rails" in meinem Gemfile bin mit:

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 

-

Können Sie den Fehler finden?

+0

Vielleicht hinzufügen 'Config.include FactoryGirl :: Syntax :: Methoden' zu 'RSpecconfigure' Block. Aber es sollte im Allgemeinen ohne das funktionieren. – zishe

+0

Auch gibt es keine Notwendigkeit in Spork seit "Frühling" erscheint, es vollständig ersetzen. – zishe

+1

haben Sie versucht, die fabrik wie ** spec/factories/products.rb ** – robzdc

Antwort

10

Ich warf eine Menge Zeug auf diese, so dass es schwer ist zu sagen, was die genaue Lösung war. Eine Sache, die ich tat, war require 'factory_girl' in spec_helper.rb zu require 'factory_girl_rails' zu wechseln, und das scheint die plausibelste Lösung zu sein.

Außerdem habe ich config.include FactoryGirl::Syntax::Methods in den Rspec.configure Block von spec_helper.rb hinzugefügt und ich denke, das war auch wichtig.

+6

Ich hatte den gleichen Fehler. In meinem Fall war das Problem, dass ich 'factory_girl' verwendet habe. Das richtige Juwel, um mit Rails zu verwenden, ist 'factory_girl_rails' (z. B.' fam_girl_rails ',' ~> 4.5.0 ', Gruppe: [: development,: test] 'in deiner Gemfile.rb). Das Hinzufügen von 'Config.include FactoryGirl :: Syntax :: Methods 'zum' RSpecconfigure'-Block hat wahrscheinlich nichts damit zu tun, dass Ihr Problem gelöst wird: Der Zweck dieser Zeile ist es, ein Objekt ohne Notwendigkeit zu erstellen auf 'FactoryGirl' verweisen (dh' create (: product) 'anstelle von' FactoryGirl.create (: product) ') –

0

"ArgumentError: Factory not registered" wird auch generiert, wenn Ihre Fabrikdefinition falsch benannt wird. Ihre Werksdefinition könnte phases.rb heißen, aber die Definition sollte lauten: factory :phase do (singular).