40 votes

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

Ive été la suite de cette introduction à Rails de test et j'ai une question je ne peux pas l'air de trouver la solution. Je suis très familier avec les Rails mais c'est ma première incursion dans le test.

De toute façon, j'ai une base de test de modèle, pas encore pleinement mis en œuvre et lorsque j'essaie de l'exécuter rspec spec/models/admin_spec.rb. J'obtiens l'erreur suivante dans l' Admin has a valid factory ligne (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 <top (required)>'

Je suppose FactoryGirl n'est pas en cours de chargement pour une raison quelconque, mais j'étais sous l'impression qu'il devrait être automatiquement chargé. Ci-dessous le code complet de mon Gemfile, /spec/modèles/admin_spec.rb et /spec/usines/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/usines/admin.rb

require 'faker'

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

/spec/modèles/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

122voto

Anthony Alberto Points 6881

Il devrait être FactoryGirl.create place. Apparemment, Factory était obsolète et a été supprimé. Regardez les commentaires dans le lien que vous avez fourni :)

10voto

Vikram Points 1363

En fait, dans vos spec_helper.rb sous Rspec.configure do...end vous pouvez ajouter

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

Cela vous évitera d'avoir à préfixer FactoryGirl. avant :build et :create :

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
 

Reportez-vous à: Documentation FactoryGirl

9voto

scarver2 Points 2605

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 afin 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 }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X