2012-05-02 13 views
27

Podążam za tutorialem Michal Hartls Rails. Rozdział 7. Zainstalowałem klejnot Factory Girl. Wciąż otrzymuję ten błąd, gdy uruchomię mój testuFactory niezarejestrowany: użytkownik

Failures: 

1) UsersController GET 'show' should be successful 
    Failure/Error: @user = FactoryGirl.create(:user) 
    ArgumentError: 
     Factory not registered: user 
    # ./spec/controllers/users_controller_spec.rb:10:in `block (3 levels) in <top (required)>' 

Finished in 0.66336 seconds 42 examples, 1 failure 

Failed examples: 

rspec ./spec/controllers/users_controller_spec.rb:14 # UsersController GET 'show' should be successful 

Gemfile

group :test do 
    gem 'autotest', '4.4.6' 
    gem "autotest-growl", "~> 0.2.16" 
    gem "autotest-rails", "~> 4.1.2" 
    gem "rspec", "~> 2.9.0" 
    gem 'rspec-rails', '2.9.0' 
    gem 'webrat', '0.7.3' 
    gem "spork", '0.9.0' 
    gem 'annotate', '~> 2.4.1.beta' 
    gem "factory_girl", "~> 3.2.0" 
end 
# See https://github.com/sstephenson/execjs#readme for more supported runtimes 
gem 'therubyracer', :platform => 

Moja user_controller_spec.rb jest

require 'spec_helper' 

describe UsersController do 

    render_views 

    describe "GET 'show'" do 
    before(:each) do 
    @user = FactoryGirl.create(:user) 
    end 

    it "should be successful" do 
     get :show, :id => @user 
     response.should be_success 
    end 
    end 

    describe "GET 'new'" do 
    it "should be successful" do 
     get :new 
     response.should be_success 
    end 

    it "should have the right title" do 
     get :new 
     response.should have_selector('title', :content => "Sign up") 
    end 
    end 
end 

Moja factories.rb jest

FactoryGirl.create :user do |user| 
    user.name     "Mark Brown" 
    user.email     "[email protected]" 
    user.password    "foobar" 
    user.password_confirmation "foobar" 
end 

I zmieniono

Factory(:name) 

do

FactoryGirl.create(:user) 

na linii 10 w moim user_controller_spec.rb becuase ja dostaję ostrzeżenie deprication. Myślałem, że to naprawi, ale teraz tylko dostaję.

Factory not registered: user 

Czy ktoś może mi powiedzieć, co się dzieje?

Odpowiedz

6

co, jeśli najpierw zdefiniujesz fabrykę, a nie ją utworzysz? spróbuj tego:

FactoryGirl.define do 
    factory :user do 
    name     "Mark Brown" 
    email     "[email protected]" 
    password    "foobar" 
    password_confirmation "foobar" 
    end 
end 
+0

To zadziałało dla mnie. Dzięki! –

3

Musisz gem „factory_girl_rails” w grupie testowej

+0

Pracowałem dla mnie. Przypadkowo użyłem gem 'factory_girl' zamiast 'factory_girl'rails' –

41

miałem ten sam błąd po raz pierwszy użyty FactoryGirl w tym rozdziale, a wszystko, co potrzebne do zrobienia było ponowne uruchomienie serwer i Spork, jeśli go używasz. Mam nadzieję, że pomaga

+3

Zrestartowałem 'spork' pomógł mi, thx! – Martin

+3

To samo, zrestartował serwer szyny i strażnik/opiekun, a następnie testy minęły. To trochę irytujące. – Raj

+0

Ten sam problem i poprawka dla użytkowników zeus. – Pistos

52

Już to naprawiłem.

Rozwiązaniem była zmiana gem 'factory_girl' na gem 'factory_girl_rails' w mojej Gemfile.

+0

Dzięki. To rozwiązało problem dla mnie. –

+0

Naprawiono problem również dla mnie - dzięki –

+0

Genialny. Dziękuję Ci! – creativetim

1

W swojej Gemfile należy wymienić z tym

gem "factory_girl_rails", "~> 4.0" 

zamiast

gem "factory_girl", "~> 3.2.0" 
0

używałem Pry jak mój IRB. Kiedy usunąłem to z moich klejnotów, udało mi się przekonać dziewczynę z fabryki do prawidłowej pracy.

rails c -e test 

irb -> FactoryGirl.create(:user) 

Może ktoś może wyjaśnić, jak to działa, używając podnośnika.

Powiązane problemy