如何在Rails控制台中使用FactoryGirl中的工厂


90

我在开发环境中使用Rails控制台,我想使用工厂。如何获得它们的访问权限?

我试过require "FactoryGirl"哪个退货

1.9.3p393 :301 > require "FactoryGirl"
LoadError: cannot load such file -- FactoryGirl

一个 简单的 谷歌搜索导致几个结果。你尝试过这些吗?他们不工作吗?你都尝试了些什么?
wpp

1
这些都在测试中,我想在开发中完成
Eric Baldwin

2
您可能想从要求'factory_girl'开始,而不是要求FactoryGirl常量。
罗布·道森

1
调整当前时间-您可以开始rails c然后进行require 'factory_bot'
RudyOnRails

Answers:


39

要解决此问题,请确保在您的Gemfile中指定了工厂bot gem,与此类似

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

然后bundle install

这将使FactoryBot类在开发控制台中可用。

希望这可以帮助。


2
像这样在gemfile中添加FactoryGirl而不是gem 'factory_girl_rails', :require => false将对尝试从头开始设置开发环境的任何人抛出错误,请注意。
Epigene

4
该答案有效,但可接受的答案应该是rails console test,它将允许您在测试环境中创建控制台,因此您无需更新Gemfile即可在开发环境中使用测试包
Dylan Pierce

195

我通过以下方式执行此操作:

  • 在沙盒模式下的测试环境中启动Rails控制台。

    rails console -e test --sandbox

您需要这样做有两个原因:

  1. 您所做的任何更改都会回滚。
  2. 如果您已经有一些种子数据,则工厂可能会从1开始对属性进行序列化,但是这些记录可能已经存在。

然后在控制台中:

  • 需要FactoryBot(被称为FactoryGirl):

    require 'factory_bot'
  • 加载工厂定义:

    FactoryBot.find_definitions
  • 包括FactoryBot方法,以避免在对FB的所有调用前面加上FactoryBotcreate而不是FactoryBot.create):

    include FactoryBot::Syntax::Methods

PS对于人造宝石,您可以使用以下命令在rails控制台中加载定义:

Fabrication.manager.load_definitions

另外,require 'faker'如果您使用它。


最后一行应该是require 'ffaker'吗?
Dihedral

这取决于您使用哪种宝石-伪造者还是骗子,但我同意最近骗子的使用更为广泛。
亚历山大

我遇到了未定义的方法fixture_file_upload问题,该问题是由于缺少ActionDispatch::TestProcess模块而引起的,因此您可以考虑将其包括在内
–divideByZero

1
如果您要大量重启控制台,请使用以下方法:require "factory_bot_rails"; include FactoryBot::Syntax::Methods; require 'ffaker'
Mirror318 '18

2
对于Rails 6.0,请按以下方式运行控制台:rails c -e test --sandbox
David Morales

26

您需要require 'factory_bot_rails',这是Rails使用的实际宝石。该宝石将包括Factory Bot库,并在其中FactoryBot提供。

您可以执行此操作,也可以更新您的Gemfile以在启动时要求它,如muttonlamb的回答。


因为我在工厂中使用Faker,所以我也不得不跑步require 'faker'
albertski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.