web-dev-qa-db-ja.com

Rails 3.2、RSpec、Factory Girl:NameError:uninitialized constant Factory

私は this の紹介をRailsテストに導入し、私が解決策を見つけることができないように思える問題に遭遇しました。私はRailsしかし、これはテストへの私の最初の進出です。

とにかく、完全に実装されていない非常に基本的なモデルテストがあり、rspec spec/models/admin_spec.rbを実行してみました。 Admin has a valid factory行に次のエラーが表示されます(以下の完全なコード)

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

何らかの理由でFactoryGirlが読み込まれていないと思いますが、自動的に読み込まれるべきだという印象を受けました。以下は、私の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

/ 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
40
chrisgooley

そのはず FactoryGirl.create代わりに。どうやらFactoryは廃止され、現在は削除されています。提供したリンクのコメントをご覧ください:)

122
Anthony Alberto

実際には、spec_helper.rbの下のRspec.configure do...endの下に追加できます

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

これにより、FactoryGirl.および:buildの前に:createをプレフィックスとして付ける手間が省けます。

「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

10
Vikram

これはあなたの質問に対する回答ではありませんが、FacterGirlでFakerを使用する際に不明瞭なエラーがあることに気付きました。 f.nameおよびf.emailは、すべてのFactoryGirl.createまたはFactoryGirl.buildで同じです。

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

Faker呼び出しの周りに中括弧を追加して、ファクトリへの各参照がランダムなFakerデータを生成するようにします。

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

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

require 'factory_girl_Rails'
1
El3ktra