40

私は次のようにthis Railsテストの入門とIveの解決策を見つけることができない問題に遭遇しています。私は非常にRailsに精通していますが、これがテストへの私の最初の進出です。Rails 3.2、RSpec、Factory Girl:NameError:初期化されていない定数Factory

私は非常に基本的なモデルテストを持っています。完全に実装されていなくても、私が試してみると、rspec spec/models/admin_spec.rbです。私はFactoryGirlが何らかの理由でロードされたありえないが、私はそれが自動的にロードされなければならない印象の下にあったと仮定し

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

Admin has a valid factoryライン(以下、フルコード)で、次のエラーが発生します。以下は、完全な私のGemfile、/spec/models/admin_spec.rbからコードと/spec/factories/admins.rbは

おかげであなたの助けのために非常に多くの

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 

/スペック/ 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 

答えて

122

それは代わりにFactoryGirl.createでなければなりません。明らかにFactoryは廃止され、削除されました。あなたが提供したリンクのコメントを見てください:)

+0

ahhh * sigh *。ハハ、どうもありがとう。私は、「初期化されていない定数の工場誤差」のページで検索しましたが、十分に近く読んでいませんでした。私はそれが何か簡単だろうと感じました。再度、感謝します。 – chrisgooley

9

これはあなたの質問に対する回答ではありませんが、私はFaker with FactoryGirl 。 f.nameおよびf.emailは、FactoryGirl.createまたはFactoryGirl.buildごとに同じになります。

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

Fakerコールの前後に中カッコを追加すると、ファクトリへの参照ごとにランダムなFakerデータが生成されます。 Rspec.configure do...endの下であなたのspec_helper.rbで実際に

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

ああ、私は後でそれをキャッチしました、私は自分のコードを見直していましたが、頭がおかしくなってくれてありがとう。 – chrisgooley

+0

ありがとうございます!愚かな間違いだが見逃しやすい – rpearce

10

あなたはこれが:buildと完全:create前に接頭辞FactoryGirl.の手間を節約します

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

を追加することができます。

'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 

参照:FactoryGirl Documentation

1

また、spec_helper.rbファイルにrequireステートメントが含まれていることを確認してください。

require 'factory_girl_rails' 
関連する問題