2012-08-09 17 views
40

Ive sta seguendo this introduttivo al test di Rails e Ive si imbattono in un problema a cui non riesco a trovare la soluzione. Ho molta familiarità con Rails ma questa è la mia prima incursione nei test.Rails 3.2, RSpec, Factory Girl: NameError: costante non inizializzata Factory

In ogni caso, ho un test del modello molto semplice, nemmeno completamente implementato e quando provo a eseguire rspec spec/models/admin_spec.rb. Ottengo il seguente errore nel Admin has a valid factory riga (codice completo di seguito)

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)>' 

presumo factorygirl isnt di essere caricati per qualche ragione, ma ho avuto l'impressione che dovrebbe essere caricato automaticamente. Di seguito è riportato il codice completo dal mio Gemfile, /spec/models/admin_spec.rb e /spec/factories/admins.rb

Grazie molto per il vostro aiuto

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/mo dels/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 

risposta

122

Dovrebbe essere FactoryGirl.create invece. A quanto pare Factory è stato ritirato e ora è stato rimosso, guarda i commenti nel link che hai fornito :)

+0

ahhh * sigh *. Haha, grazie molte. Ho trovato un risultato nella pagina per "errore di fabbrica costante non inizializzato" ma non ho letto abbastanza vicino. Ho avuto la sensazione che sarebbe stato qualcosa di semplice. Grazie ancora. – chrisgooley

9

Questa non è una risposta alla tua domanda, ma ho notato che c'è un errore oscuro nell'uso di Faker con FactoryGirl . f.name e f.email sarà lo stesso per ogni FactoryGirl.create o FactoryGirl.build.

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

Aggiungi parentesi graffe intorno al Faker chiama in modo che ogni riferimento a una fabbrica genererà dati Faker casuali.

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

Ah sì, l'ho beccato più tardi, mentre stavo rivedendo il mio codice, ma grazie comunque per l'heads-up. – chrisgooley

+0

Grazie per questo! Errore stupido ma facile da perdere – rpearce

10

Infatti nella vostra spec_helper.rb sotto Rspec.configure do...end è possibile aggiungere

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

questo vi farà risparmiare la fatica del prefisso FactoryGirl. prima :build e :create del tutto:

richiedono '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 

Riferimento: FactoryGirl Documentation

1

Inoltre, assicurarsi di includere l'istruzione require nel file spec_helper.rb.

require 'factory_girl_rails' 
Problemi correlati