Rails 3 + FactoryGirl: NameError: неинициализированная константа Factory - PullRequest
8 голосов
/ 08 апреля 2011
ruby-1.9.2-p180 :007 > Factory.define :user do |user|
ruby-1.9.2-p180 :008 >       user.email                  "user@example.com"
ruby-1.9.2-p180 :009?>     user.password               "foobar"
ruby-1.9.2-p180 :010?>     user.password_confirmation  "foobar"
ruby-1.9.2-p180 :011?>   end
NameError: uninitialized constant Factory

Мой Gemfile:

group :test do 
  gem "rspec-rails"
  gem 'webrat', '0.7.1'
  gem 'spork', '0.9.0.rc4'
  gem 'factory_girl_rails'
end

Даже несмотря на то, что, кажется, у меня все как положено, я продолжаю получать эту ошибку.У меня также есть factory.rb.

Спасибо

Ответы [ 4 ]

10 голосов
/ 08 апреля 2011

Я полагаю, вы пытаетесь в консоли в среде разработки. Но вы добавляете самоцвет Factory только в тестовой среде.

Если вы хотите получить доступ к Factory_girl при разработке в вашем Gemfile:

group :test, :development do
  gem 'factory_girl_rails'
end

Или, если вы хотите протестировать ваш Factory, запустите консоль в тестовой среде:

rails c test
2 голосов
/ 12 июня 2013

Я тоже столкнулся с этим, когда делал урок по Hartl.

Если вы используете « Spork » для ускорения ваших тестов и он работает в фоновом режиме, когда вы добавляете код FactoryGirl, вам нужно будет остановить его и перезапустить.

2 голосов
/ 21 декабря 2012

У нас была похожая проблема с нашей стороны, казалось, что спецификация рейка случайно проваливалась с ошибкой неинициализированной константы FactoryGirl.Ошибка была случайной -> приходить и уходить.Мы вернулись с полдюжины мерзавцев, чтобы попытаться решить их.В конце концов это была глупая ошибка.

Основная проблема в том, что RAILS_ENV установлен на development .Его нужно установить на test при запуске rake spec.

Address by:

  1. Убедиться, что мы запускаем rake spec вRAILS_ENV test среда и ее экспорт / источник правильно.Чтобы никогда не путать наши environemnts, мы изменили переменную zsh $ RPROMPT env, чтобы показать текущее env.

    export RPROMPT = "[% {$ fg_no_bold [yellow]%} $ RAILS_ENV% {$ reset_color%}]] *

  2. Требуется, чтобы FactoryGirl в спецификационных файлах ruby ​​выдавала гораздо лучшее сообщение об ошибке.По крайней мере, rspec будет работать просто так, если среда была неправильной.Мы также обновили наш gemfile, чтобы убедиться, что factory_girl_rails и factory_girl были загружены как для разработки, так и для тестирования.

  3. Теперь мы просто запускаем rpsec с использованием gem guard в выделенном терминалес правильным набором RAILS_ENV.

Это один из тех готчей.

Мы используем Ruby 1.9.3, Rails 3.2.9, Rspec 2.12, factory_girl 4.1.

0 голосов
/ 23 января 2013

Вам также следует изменить Factory.define на FactoryGirl.define, как в этом примере

 FactoryGirl.define do
  factory :user do
    name 'John Doe'
    date_of_birth { 21.years.ago }
  end
end

из factory_girl документации

...