アルパカログ

Webエンジニア兼マネージャーがプログラミングやマネジメント、読んだ本のまとめを中心に書いてます。

Ruby on Rails エンジンにおけるFactoryBotの設定方法

f:id:otoyo0122:20200902091933p:plain:w300

Ruby on Railsでの開発において、FactoryBotはもはや切っても切れない存在になっています。

しかし、Ruby on Railsでサブアプリを追加する機能の「エンジン」を使う場合には、設定に少し戸惑うかもしれません。

このエントリでは、Ruby on Rails 6のエンジンでFactoryBotを使うための設定を説明します。

設定方法

エンジンについては下記チュートリアルを参照してください。

以下、エンジン名はチュートリアルで登場する Blorgh を使って説明します。

エンジンのgemspecにfactory_bot_railsの依存を追加し、factoryファイルを配置するパスを追加します。

blorgh/blorgh.gemspec

Gem::Specification.new do |spec|
  # ...
  spec.files = Dir["{app,config,db,lib}/**/*", "spec/factories/**/*", "Rakefile", "README.md"]

  # ...
  spec.add_development_dependency "factory_bot_rails"
end

エンジンクラスでfactory_botのfactoryファイルを配置するパスを追加します。

blorgh/lib/blorgh/engine.rb

module Blorgh
  class Engine < ::Rails::Engine
    isolate_namespace Blorgh

    config.generators do |g|
      g.test_framework :rspec, fixture: false
      g.fixture_replacement :factory_bot, dir: "spec/factories"
    end

    initializer "blorgh.factories", after: "factory_bot.set_factory_paths" do
      FactoryBot.definition_file_paths << File.expand_path("../../spec/factories", __dir__) if defined?(FactoryBot)
    end
  end
end

これでblorgh/spec/factories/以下にfactoryファイルを配置すればspecから使用することができます。

以上です。

このエントリでは、Ruby on Rails6のエンジンでFactoryBotを使うための設定を説明しました。

参考になった方は、ぜひ「はてブ」やSNSでシェアしていただけると嬉しいです。