Rails 3.2, RSpec, Factory Girl: NameError: constante non initialisée Factory

J’ai suivi cette introduction aux tests de Rails et j’ai rencontré un problème que je n’arrive pas à résoudre. Je suis très familier avec Rails mais c’est ma première incursion dans les tests.

Quoi qu’il en soit, j’ai un test de modèle très basique, même pas complètement implémenté et quand j’essaie d’exécuter rspec spec/models/admin_spec.rb . J’obtiens l’erreur suivante dans l’ Admin has a valid factory ligne d’ Admin has a valid factory (code complet ci-dessous)

 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 ' 

Je suppose que FactoryGirl n’est pas chargé pour une raison quelconque, mais j’avais l’impression qu’il devrait être chargé automatiquement. Vous trouverez ci-dessous le code complet de mon Gemfile, /spec/models/admin_spec.rb et /spec/factories/admins.rb

Merci beaucoup pour votre aide

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 

Cela devrait être FactoryGirl.create place. Apparemment, Factory été déconseillée et a maintenant été supprimée, regardez les commentaires dans le lien que vous avez fourni 🙂

En fait, dans votre spec_helper.rb sous Rspec.configure do...end vous pouvez append

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

Cela vous évitera les problèmes du préfixe FactoryGirl. avant :build et :create tout à fait:

nécessite ‘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 

Refer: Documentation FactoryGirl

Ce n’est pas une réponse à votre question, mais j’ai remarqué qu’il y a une erreur obscure dans votre utilisation de Faker avec FactoryGirl. f.name et f.email seront les mêmes pour chaque FactoryGirl.create ou FactoryGirl.build.

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

Ajoutez des accolades autour des appels Faker pour que chaque référence à une fabrique génère des données Faker aléatoires.

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

Veillez également à inclure l’instruction require dans votre fichier spec_helper.rb.

 require 'factory_girl_rails'