rails matchers bot ruby-on-rails-3 testing rspec ruby-on-rails-3.2 factory-bot

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 }