J'ai suivi ce introduction à Rails tests et j'ai rencontré un problème que je ne peux pas trouver la solution. 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, pas même complètement implémenté et quand j'essaie de lancer rspec spec/models/admin_spec.rb
. J'obtiens l'erreur suivante dans le 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 que FactoryGirl n'est pas en cours de chargement pour une raison quelconque, mais j'avais l'impression qu'il devrait être chargé automatiquement. 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
Ça devrait être FactoryGirl.create
au lieu. Apparemment, Factory
était obsolète et a maintenant été supprimé, regardez les commentaires dans le lien que vous avez fourni :)
En fait, dans votre spec_helper.rb
sous Rspec.configure do...end
vous pouvez ajouter
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
end
Cela vous évitera le problème du préfixe FactoryGirl.
avant :build
et :create
au total:
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
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 usine génère des données Faker aléatoires.
f.name { Faker::Name.name }
f.email { Faker::Internet.email }
Assurez-vous également que vous incluez l'instruction require dans votre fichier spec_helper.rb.
require 'factory_girl_Rails'