【问题标题】:How do I use factories from FactoryGirl in rails console如何在 Rails 控制台中使用 FactoryGirl 的工厂
【发布时间】:2013-08-14 06:54:08
【问题描述】:

我在开发环境中使用 Rails 控制台,我想使用工厂。我如何才能访问它们?

我试过require "FactoryGirl",它返回

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

【问题讨论】:

  • A simple google 搜索导致多个结果。你试过这些吗?他们不工作吗?到目前为止,您尝试过什么?
  • 这些都在测试中,我想在开发中做
  • 您可能希望从 require 'factory_girl' 开始,而不是使用 FactoryGirl 常量。
  • 调整当前时间 - 您可以开始 rails c 然后执行 require 'factory_bot'

标签: ruby-on-rails factory-bot


【解决方案1】:

要解决这个问题,请确保在您的 Gemfile 中指定工厂机器人 gem,类似于此

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

然后bundle install

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

希望这会有所帮助。

【讨论】:

  • 像这样在 gemfile 中添加 FactoryGirl 而不是 gem 'factory_girl_rails', :require => false 会给尝试从头开始设置开发环境的任何人抛出错误,请注意。
  • 这个答案有效,但接受的答案应该是rails console test,它将允许您在测试环境中创建控制台,因此您无需更新 Gemfile 即可使用测试包开发环境
【解决方案2】:

您需要require 'factory_bot_rails',这是 Rails 使用的实际 gem。该 gem 将包含 Factory Bot 库,使 FactoryBot 可用。

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

【讨论】:

  • 因为我在工厂里使用的是Faker,所以我还得跑require 'faker'
【解决方案3】:

我这样做的方式如下:

  • 以沙盒模式在测试环境中启动 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
    

附:对于fabrication gem,您可以在rails 控制台中加载定义:

Fabrication.manager.load_definitions

如果你使用它,也可以require 'faker'

【讨论】:

  • 最后一行应该是require 'ffaker'吗?
  • 这取决于你使用的是哪个 gem - faker 或 ffaker,但我同意最近 ffaker 被更广泛地使用。
  • 我遇到了未定义的方法fixture_file_upload 问题,这是由于缺少ActionDispatch::TestProcess 模块引起的,所以您可以考虑也包括它
  • 如果你经常重启控制台,这里有一条:require "factory_bot_rails"; include FactoryBot::Syntax::Methods; require 'ffaker'
  • 对于 Rails 6.0,像这样运行控制台:rails c -e test --sandbox
【解决方案4】:

如果您希望每次启动控制台时都可以使用,可以将这段代码添加到 config/environments/development.rb 的顶部:

require 'factory_bot_rails'
require 'faker' # if you're also using faker gem
require 'rails/console/helpers'
Rails::ConsoleMethods.prepend(FactoryBot::Syntax::Methods)

现在您可以在启动控制台后立即使用内置帮助器,例如:

company = create(:company)

【讨论】:

  • 对于 Rails 6,这个答案很接近——以前的答案不起作用。我只需要运行Rails::ConsoleMethods.prepend(FactoryBot::Syntax::Methods)(而不是前三个requires)就可以让它工作(我不使用faker)。
  • @EdRuder 如果您在 Gemfile 的 development 组中有这些宝石,那么您是对的 - 它们应该是自动需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
相关资源
最近更新 更多