2010-10-21 16 views
7

Ich versuche railstutorial.org zu folgen, und bin zur Zeit auf Kapitel 7, wo Sie Fabriken beginnen: http://railstutorial.org/chapters/modeling-and-viewing-users-two#sec:tests_with_factoriesrailstutorial.org - nicht definierte Methode `Factory‘

Ich Rails 3.0.1 und Rubin mit -1.9.2-p0

ich kann nicht für das Leben von mir meine rspec Tests bekommen obwohl passieren, wird der Fehler i erhalten ist

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

meine factories.rb wie folgt aussieht:

# 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 

und das ist mein users_controller_spec.rb Datei:

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 

hier ist mein Gemfile, wenn es hilft:

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 

Antwort

7

Vielleicht sollten Sie die neue Syntax versuchen (siehe github readme Fabrik Mädchen)

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

Danke, das ist es! – bobaboba

12

Ich habe genau diese Fehlermeldung erhalten. Ich habe gerade meinen Spork Server und Autotest neu gestartet und alles wurde für mich grün.

+0

+1 Das behebt das Problem für mich mit der FactoryGirl-Version aus dem Tutorial. – cschol

+0

+1 Neustart von Spork funktioniert nur magisch für mich. – Zeiga

0

Für mich hatte ich require 'factory_girl'-test_helper.rb

2

Ich hatte dieses Problem hinzufügen, aber es war, weil ich die Fabrik Mädchen Juwel unter dem Entwicklungsabschnitt gelegt hatte statt der Teststrecke des Gemfile. Einmal unter der Teststrecke, hat es funktioniert. Ein Unterschied Ich stelle fest, zwischen meinem Eintritt und dein ist die Mine gibt 1,0:

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

Meine Lösung: Ich habe eingeschlossen es aus Versehen im :development Block und einfach musste sie bewegen, um den :test Block

(Ich habe es hier aufgelistet, weil es jemandem helfen könnte, der dem Tutorial nicht richtig folgt)

-1

Ich war entschlossen, die neueste Version von Factory Girl zu verwenden, also habe ich versucht, den Code anzupassen. Haben Sie nicht für mich arbeiten, so habe ich

gem 'factory_girl_rails', '1.0' 

in der Gemfile die Version bei 1,0

bundle update 

Neustart Spork und Autotest zu sperren und es funktionierte.

19

Nach der neuesten Version von Factory Girl (derzeit v4.0.0) Fabriken neu schreiben.

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

dann rufen Sie von Ihrem Benutzer-Controller Spezifikationen wie:

FactoryGirl.create(:user) 
3

In der Spec-Einsatz

@user = FactoryGirl(:user) 

statt

@user = Factory(:user) 
+3

Anstelle von FactoryGirl (: user) wird useFactoryGirl.create (: user) wie von @Postscripter –

+1

create vorgeschlagen implizit aufgerufen – jeremiemv

0

ich so getan haben, hinzufügen require 'factory_girl' bis test_helper.rb und

@user = FactoryGirl.create(:user) 
Verwandte Themen