2010-10-21 17 views
7

sto cercando di seguire railstutorial.org, e sono attualmente sul capitolo 7, dove si inizia con le fabbriche: http://railstutorial.org/chapters/modeling-and-viewing-users-two#sec:tests_with_factoriesrailstutorial.org - metodo non definito `Fabbrica'

sto usando Rails 3.0.1 e rubino -1.9.2-p0

non posso per la vita di me ottenere il mio test RSpec a passare, però, l'errore che ottengo è

Failures: 
    1) UsersController GET 'show' should be successful 
    Failure/Error: @user = Factory(:user) 
    undefined method `Factory' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_1:0x00000101cc5608> 
# ./spec/controllers/users_controller_spec.rb:9:in `block (3 levels) in <top (required)>' 

mia factories.rb assomiglia a questo:

# By using the symbol ':user', we get Factory Girl to simulate the User model. 
Factory.define :user do |user| 
    user.name     "Michael Hartl" 
    user.email     "[email protected]" 
    user.password    "foobar" 
    user.password_confirmation "foobar" 
end 

e questo è il mio users_controller_spec.rb di file:

require 'spec_helper' 

describe UsersController do 
    render_views 

    describe "GET 'show'" do 
    before(:each) do 
     @user = Factory(:user) 
    end 
    it "should be successful" do 
     get :show, :id => @user 
     response.should be_success 
    end 

Ecco la mia Gemfile, se aiuta:

source 'http://rubygems.org' 

gem 'rails', '3.0.1' 

# Bundle edge Rails instead: 
# gem 'rails', :git => 'git://github.com/rails/rails.git' 

gem 'sqlite3-ruby', :require => 'sqlite3' 
gem 'gravatar_image_tag' 

group :development do 
    gem 'rspec-rails' 
    gem 'annotate-models' 
end 

group :test do 
    gem 'rspec' 
    gem 'webrat' 
    gem 'spork' 
    gem 'factory_girl_rails' 
end 

risposta

7

Forse si dovrebbe provare la nuova sintassi (vedi github readme di ragazza di fabbrica)

FactoryGirl.define :user do |user| 
    user.name     "Michael Hartl" 
    user.email     "[email protected]" 
    user.password    "foobar" 
    user.password_confirmation "foobar" 
end 
+0

Grazie, che lo ha fatto! – bobaboba

12

Ho ottenuto esattamente lo stesso messaggio di errore. Ho appena riavviato il mio server Spork e Autotest e tutto è diventato verde per me.

+0

+1 Questo mi ha risolto il problema con la versione FactoryGirl del tutorial. – cschol

+0

+1 Riavviare Spork funziona magicamente solo per me. – Zeiga

0

Per quanto mi riguarda ho dovuto aggiungere require 'factory_girl'-test_helper.rb

2

Ho avuto questo problema, ma era perché avevo messo la gemma fabbrica ragazza sotto la sezione di sviluppo al posto della sezione di prova della Gemfile. Una volta sotto la sezione di test, ha funzionato. Una differenza Prendo atto tra il mio ingresso e il vostro è che la mia specifica 1.0:

group :test do 
    gem 'rspec-rails', '2.6.1' 
    gem 'webrat', '0.7.1' 
    gem 'factory_girl_rails', '1.0' 
end 
0

La mia soluzione: ho accidentalmente inserito nel blocco :development, e semplicemente dovuto spostare al :test blocco

(L'ho elencato qui, perché potrebbe aiutare qualcuno che non segue correttamente il tutorial)

-1

Ero determinato a usare la versione più recente di Factory Girl, quindi ho provato ad adattare il codice. Non ha funzionato per me, così ho usato

gem 'factory_girl_rails', '1.0' 

nel Gemfile per bloccare la versione a 1,0

bundle update 

riavvio spork e autotest e ha funzionato.

19

Come per l'ultima versione di Factory Girl (attualmente v4.0.0) riscrive le fabbriche.rb

FactoryGirl.define do 
    factory :user do 
    name     "Michael Hartl" 
    email     "[email protected]" 
    password    "foobar" 
    password_confirmation "foobar" 
    end 
end 

quindi chiamare da vostre specifiche del controller utenti come:

FactoryGirl.create(:user) 
3

Nel vostro uso spec

@user = FactoryGirl(:user) 

invece di

@user = Factory(:user) 
+3

Invece di FactoryGirl (: user), useFactoryGirl.create (: user) come suggerito da @Postscripter –

+1

create viene chiamato implicitamente – jeremiemv

0

ho fatto, aggiungi require 'factory_girl'-test_helper.rb e

@user = FactoryGirl.create(:user)