Rails 3 + FactoryGirl:NameError:未初始化的常量工厂

时间:2011-04-08 13:07:42

标签: ruby-on-rails-3 factory-bot

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 个答案:

答案 0 :(得分:10)

我想你在开发环境中尝试使用控制台。但是只在测试环境中添加Factory gem。

如果您想在Gemfile中使用开发中的Factory_girl:

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

或者,如果您想测试工厂在测试环境中启动控制台:

rails c test

答案 1 :(得分:2)

我们在结束时遇到了类似的问题,rake规范似乎是随机失败的错误未初始化的恒定FactoryGirl。错误是随机的 - >来来往往。我们回去了六个git提交尝试解决它。最后,这是一个愚蠢的错误。

根本问题是RAILS_ENV设置为开发。运行rake spec时,需要将其设置为 test

地址:

  1. 确保我们在RAILS_ENV 测试环境中运行rake规范并正确导出/已导出。为了不混淆我们的environemnts,我们修改了zsh $ RPROMPT env变量来显示当前的env。

    export RPROMPT =“[%{$ fg_no_bold [yellow]%} $ RAILS_ENV%{$ reset_color%}]”

  2. 在规范ruby文件中要求FactoryGirl提供了更好的错误消息。当环境出错时,至少rspec会以这种方式完全失败。我们还更新了我们的gemfile,以确保加载factory_girl_rails和factory_girl进行开发和测试。

  3. 现在我们只需在设置了正确RAILS_ENV的专用终端中使用 gem guard 运行rpsec。

  4. 其中一个陷阱。

    我们正在运行Ruby 1.9.3,Rails 3.2.9,Rspec 2.12,factory_girl 4.1。

答案 2 :(得分:2)

我在做Hartl教程时遇到了这个问题。

如果您使用“ Spork ”加速测试,并且在添加FactoryGirl代码时它在后台运行,则需要停止并重新启动它。

答案 3 :(得分:0)

您还应该将Factory.define更改为FactoryGirl.define,就像在此示例中一样

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