2010-10-21 34 views
7

Estoy intentando seguir railstutorial.org, y actualmente estoy en el capítulo 7, donde se inicia el uso de fábricas: http://railstutorial.org/chapters/modeling-and-viewing-users-two#sec:tests_with_factoriesrailstutorial.org - método no definido 'Factory'

que estoy usando Rails 3.0.1 y rubí -1.9.2-P0

no puedo por la vida de mí conseguir mis pruebas rspec pasar embargo, el error que recibo es

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

mi factories.rb se ve así:

# 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 

y este es mi users_controller_spec.rb archivo:

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 

aquí está mi Gemfile, si ayuda:

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 

Respuesta

7

tal vez debería probar la nueva sintaxis (ver github readme de la chica de la fábrica)

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

Gracias, eso fue todo! – bobaboba

12

Recibí exactamente el mismo mensaje de error. Acabo de reiniciar mi servidor Spork y Autotest y todo se volvió verde para mí.

+0

+1 Esto me solucionó el problema con la versión FactoryGirl del tutorial. – cschol

+0

+1 Reiniciar Spork simplemente funciona mágicamente para mí. – Zeiga

0

Para mí he tenido que añadir a require 'factory_girl'test_helper.rb

2

he tenido este problema, pero era porque yo había colocado la piedra chica fábrica bajo la sección de desarrollo en lugar de la sección de prueba de la Gemfile. Una vez debajo de la sección de prueba, funcionó. Una diferencia entre observo mi entrada y la suya es que la mina especifica 1.0:

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

Mi solución: He incluido accidentalmente en el bloque :development, y simplemente tenía que moverlo a la :test bloque

(Lo he enumerado aquí, porque podría ayudar a alguien que no sigue el tutorial correctamente)

-1

Estaba decidido a utilizar la versión más reciente de Factory Girl, así que traté de adaptar el código. No funcionó para mí, así que utilicé

gem 'factory_girl_rails', '1.0' 

en el Gemfile para bloquear la versión en 1,0

bundle update 

spork reinicio y autotest y funcionó.

19

Según la última versión de Factory Girl (actualmente v4.0.0) reescribe las fábricas.rb

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

entonces llamaremos a partir de las especificaciones de su controlador usuarios como:

FactoryGirl.create(:user) 
3

En el uso de especificaciones

@user = FactoryGirl(:user) 

en lugar de

@user = Factory(:user) 
+3

En lugar de FactoryGirl (: usuario), useFactoryGirl.create (: user) como lo sugiere @Postscripter –

+1

create se llama implícitamente – jeremiemv

0

lo he hecho, agregar require 'factory_girl' a test_helper.rb y

@user = FactoryGirl.create(:user) 
Cuestiones relacionadas