2014-05-25 10 views
5

Próbuję uruchomić rspec z FactoryGirl, ale Wciąż otrzymuję ten błąd:ArgumentError: Fabryka niezarejestrowany

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

-

Oto test z błędem (SPEC/wnioski/products_spec.rb):

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

-

Oto fabryka (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 wznowiona serwer (z Spork i Straży) i nic się nie zmieniło, choć nie może być ponowne uruchomienie Spork/Ostrożnie.

-

I mają require 'factory_girl' w moim specyfikacji/spec_helper.rb.

-

Oto mój Gemfile. Zauważ, że używam "factory_girl_rails" w moim 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 

-

można znaleźć błąd?

+0

Może dodać 'config.include FactoryGirl :: Syntax :: Methods do bloku' RSpec.configure'. Ale powinno to działać bez tego w ogóle. – zishe

+0

Nie ma też potrzeby, aby pojawił się 'spring', ale całkowicie go zastąpił. – zishe

+1

Czy próbowałeś/aś stworzyć fabrykę jak ** spec/factory/products.rb ** – robzdc

Odpowiedz

10

Wrzuciłem w to sporo rzeczy, więc trudno powiedzieć, jaka była dokładna poprawka. Jedną z rzeczy było przełączenie require 'factory_girl' w spec_helper.rb na require 'factory_girl_rails' i wydaje się to najbardziej prawdopodobnym rozwiązaniem.

Dodałem również config.include FactoryGirl::Syntax::Methods do bloku 01_spec_helper.rb i uważam, że było to również ważne.

+6

Miałem ten sam błąd. W moim przypadku problem polegał na tym, że używałem 'factory_girl'. Właściwym klejnotem do użycia z Railsami jest 'factory_girl_rails' (np.' Gem 'factory_girl_rails', '~> 4.5.0', grupa: [: development,: test] 'w twoim Gemfile.rb). Dodanie 'config.include FactoryGirl :: Składnia :: Metody' do bloku' RSpec.configure' prawdopodobnie nie ma nic wspólnego z rozwiązanym problemem: celem tej linii jest umożliwienie utworzenia obiektu bez potrzeby w odniesieniu do 'FactoryGirl' (tj.' create (: product) 'zamiast' FactoryGirl.create (: product) ') –

0

"ArgumentError: Factory niezarejestrowany" jest również generowany, jeśli twoja definicja fabryczna jest błędnie nazwana. Twoja definicja fabryczna może być nazywana phases.rb, ale definicja powinna brzmieć: factory :phase do (liczba pojedyncza).