アルパカログ

プログラミングとマネジメントがメインです。時々エモいのも書きます。

Rails6エンジンでFactoryBotを使う

Rails6のエンジンでFactoryBotを使うための設定をメモしておきます。

エンジンについては下記チュートリアルを参照してください。以下、エンジン名はチュートリアルで登場する Blorgh を使って説明します。

Rails エンジン入門 - Railsガイド

エンジンの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 から使用することができます。