2012-08-09 17 views
40

He estado siguiendo this introducción a Rails testing y he encontrado un problema que parece no poder encontrar la solución. Estoy muy familiarizado con Rails, pero esta es mi primera incursión en las pruebas.Rails 3.2, RSpec, Factory Girl: NameError: constante no inicializada Factory

De todos modos, tengo una prueba de modelo muy básico, ni siquiera totalmente implementado y cuando intento ejecutar rspec spec/models/admin_spec.rb. Me sale el siguiente error en la línea de Admin has a valid factory (código completa a continuación)

Admin has a valid factory 
Failure/Error: Factory.create(:admin).should be_valid 
NameError: 
    uninitialized constant Factory 
# ./spec/models/admin_spec.rb:6:in `block (2 levels) in <top (required)>' 

Asumo factorygirl tampoco ser cargado por alguna razón, pero yo tenía la impresión de que debería cargarse automáticamente. A continuación se muestra el código completo de mi Gemfile, /spec/models/admin_spec.rb y /spec/factories/admins.rb

Gracias mucho por su ayuda

Gemfile

source 'https://rubygems.org' 

gem 'rails', '3.2.2' 
gem 'mysql2' 
gem 'jquery-rails' 
gem 'haml' 
gem 'bcrypt-ruby', :require => 'bcrypt' 
gem 'bootstrap-sass', '~> 2.0.2' 
gem 'capistrano' 
gem 'json' 
gem "paperclip", '~>3.0' 
gem 'airbrake' 
gem 'acts_as_list' 
gem 'nested_form', :git => 'https://github.com/ryanb/nested_form.git' 
gem 'bootstrap-wysihtml5-rails' 
gem 'will_paginate', '~> 3.0' 
gem 'bootstrap-will_paginate' 
gem 'thinking-sphinx', '2.0.10' 

gem 'sass-rails', '~> 3.1' 
gem 'coffee-rails' 
gem 'uglifier' 
# gem 'compass' 

group :development do 
    gem 'awesome_print' 
    gem 'wirble' 
end 

group :development, :test do 
    gem 'rspec-rails' 
    gem 'factory_girl_rails' 
end 

group :production do 
    gem 'execjs' 
    gem 'therubyracer' 
end 

group :test do 
    # Pretty printed test output 
    gem 'turn', :require => false 
    gem 'faker' 
    gem 'capybara' 
    gem 'guard-rspec' 
    gem 'launchy' 
end 

/spec/factories/admin.rb

require 'faker' 

FactoryGirl.define do 
    factory :admin do |f| 
    f.name Faker::Name.name 
    f.email Faker::Internet.email 
    end 
end 

/spec/mes dels/admin_spec.rb

require 'spec_helper' 

describe Admin do 
    it "has a valid factory" do 
    Factory.create(:admin).should be_valid 
    end 
    it "is invalid without a name" 
    it "is invalid without an email" 
end 

Respuesta

122

Se deben ser FactoryGirl.create lugar. Aparentemente Factory ha quedado obsoleto y ahora ha sido eliminado, mira los comentarios en el enlace que proporcionaste :)

+0

ahhh * suspiro *. Jaja, muchas gracias. Hice un hallazgo en la página para el "Error de Fábrica constante no inicializado" pero no leí lo suficientemente cerca. Tengo la sensación de que sería algo simple. Gracias de nuevo. – chrisgooley

9

Esta no es una respuesta a tu pregunta, pero noté que hay un oscuro error en el uso de Faker con FactoryGirl . f.name y f.email será el mismo para cada FactoryGirl.create o FactoryGirl.build.

f.name Faker::Name.name 
f.email Faker::Internet.email 

Agregue llaves alrededor de las llamadas de Faker para que cada referencia a una Fábrica genere datos aleatorios de Faker.

f.name { Faker::Name.name } 
f.email { Faker::Internet.email } 
+0

Ah sí, lo descubrí más tarde, mientras revisaba mi código, pero gracias por el aviso de todos modos. – chrisgooley

+0

¡Gracias por esto! Estúpido error pero fácil de perder – rpearce

10

De hecho en su spec_helper.rb bajo Rspec.configure do...end puede agregar

RSpec.configure do |config| 
    config.include FactoryGirl::Syntax::Methods 
end 

Esto le ahorrará la molestia de la FactoryGirl. prefijo antes :build y :create completo:

requieren 'spec_helper'

describe Admin do 
    it "has a valid factory" do 
    create(:admin).should be_valid 
    end 
    it "is invalid without a name" 
    it "is invalid without an email" 
end 

Consulte: FactoryGirl Documentation

1

Además, asegúrese de incluir la declaración require en su archivo spec_helper.rb.

require 'factory_girl_rails' 
Cuestiones relacionadas