ruby-on-rails-3 - matchers - rspec rails
Rails 3.2, RSpec, Factory Girl: NameError: constante no inicializada Factory (4)
He estado siguiendo this introducción a las pruebas de Rails y me he encontrado con 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.
De todos modos, tengo una prueba de modelo muy básica, ni siquiera completamente implementada, y cuando intento ejecutar rspec spec/models/admin_spec.rb
. Recibo el siguiente error en el Admin has a valid factory
línea de Admin has a valid factory
(código completo 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)>''
Supongo que FactoryGirl no se está cargando por alguna razón, pero 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
Muchas gracias 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/models/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
Además, asegúrese de incluir la declaración require en su archivo spec_helper.rb.
require ''factory_girl_rails''
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 hacer el prefijo FactoryGirl.
before :build
y :create
conjunto:
requiere ''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: Documentación de FactoryGirl
Debería ser FactoryGirl.create
lugar. Al parecer, Factory
fue obsoleta y ahora se ha eliminado, mira los comentarios en el enlace que proporcionaste :)
Esta no es una respuesta a su pregunta, pero noté que hay un error oscuro en su uso de Faker con FactoryGirl. f.name y f.email serán los mismos 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 Factory genere datos aleatorios de Faker.
f.name { Faker::Name.name }
f.email { Faker::Internet.email }