2014-05-25 15 views
5

Sto cercando di eseguire RSpec con factorygirl, ma Continuo a ricevere questo errore:ArgumentError: fabbrica non registrato

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

-

Ecco il test con l'errore (spec/richieste/products_spec.rb):

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

-

Ecco fabbrica (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 

-

ho riavviato il server (con Spork e della Guardia) e non è cambiato nulla, anche se non può essere il riavvio Spork/Guardare correttamente.

-

ho non hanno bisogno di 'factory_girl' nella mia spec/spec_helper.rb.

-

Ecco la mia Gemfile. Si noti che sto usando "factory_girl_rails" nel mio Gemfile:

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 

-

si può trovare l'errore?

+0

Forse aggiungere 'config.include FactoryGirl :: Syntax :: Methods' al blocco' RSpec.configure'. Ma dovrebbe funzionare senza quello in generale. – zishe

+0

Inoltre non c'è bisogno di spork dal momento che compare 'spring', lo sostituisce completamente. – zishe

+1

hai provato a creare la factory come ** spec/factories/products.rb ** – robzdc

risposta

10

Ho gettato un sacco di roba in questo, quindi è difficile dire quale fosse la soluzione esatta. Una cosa che ho fatto è stata passare a require 'factory_girl' in spec_helper.rb a require 'factory_girl_rails' e quella sembra essere la soluzione più plausibile.

Inoltre, ho aggiunto config.include FactoryGirl::Syntax::Methods al blocco Rspec.configure di spec_helper.rb e penso che fosse anche importante.

+6

Ho avuto lo stesso errore. Nel mio caso il problema era che stavo usando 'factory_girl'. La gemma giusta da usare con Rails è 'factory_girl_rails' (ad esempio' gem 'factory_girl_rails', '~> 4.5.0', group: [: development,: test] 'nel tuo Gemfile.rb). L'aggiunta di 'config.include FactoryGirl :: Syntax :: Methods' al blocco' RSpec.configure' probabilmente non ha nulla a che fare con il problema da risolvere: lo scopo di questa linea è di consentire a uno di creare un oggetto senza aver bisogno per fare riferimento a 'FactoryGirl' (cioè' create (: product) 'invece di' FactoryGirl.create (: product) ') –

0

"ArgumentError: Factory not registered" viene generato anche se la definizione di fabbrica è errata. La definizione di fabbrica potrebbe essere denominata phases.rb, ma la definizione dovrebbe essere: factory :phase do (singolare).

Problemi correlati