Подтвердить что ты не робот

Rails 3.2, RSpec, Factory Девушка: NameError: неинициализированная константа Factory

Я следил за этим, вводящим к тестированию 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
4b9b3361

Ответ 1

Вместо этого должно быть FactoryGirl.create. По-видимому, Factory устарел и теперь удален, посмотрите комментарии в указанной ссылке:)

Ответ 2

Фактически в 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

Ответ 3

Это не ответ на ваш вопрос, но я заметил, что существует неясная ошибка в использовании вами Faker с FactoryGirl. f.name и f.email будут одинаковыми для каждого FactoryGirl.create или FactoryGirl.build.

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

Добавьте фигурные скобки вокруг вызовов Faker, чтобы каждая ссылка на Factory создавала случайные данные Faker.

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

Ответ 4

Кроме того, убедитесь, что вы включили инструкцию require в файл spec_helper.rb.

require 'factory_girl_rails'