ググっても引っかからなかったので取り急ぎメモ
結論
Gemfile
- gem 'factory_bot_rails'
+ gem 'factory_bot_rails', require: false
背景
bin/rails db:create
や bundle exec rake db:create
等で ActiveRecord::NoDatabaseError: Unknown database 'xxxxx'
というエラーが発生した。いや、その DB を作れと言ってるんだが...?
スタックトレースを追うと factory_bot
に関する怪しげな部分が見つかった。以下は GitHub Actions 上での例。
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/trait.rb:12:in `instance_eval'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/trait.rb:12:in `initialize'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/definition_proxy.rb:173:in `new'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/definition_proxy.rb:173:in `trait'
/home/runner/work/xxxx/xxxx/spec/factories/articles.rb:70:in `block (2 levels) in <main>'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:18:in `instance_eval'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:18:in `factory'
/home/runner/work/xxxx/xxxx/spec/factories/articles.rb:2:in `block in <main>'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:49:in `instance_eval'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:49:in `run'
/home/runner/work/xxxx/xxxx/vendor/bundle/ruby/2.5.0/gems/factory_bot-5.0.2/lib/factory_bot/syntax/default.rb:7:in `define'
応急的に require
するまで factory_bot_rails
をロードしないようにして解決した。
Gemfile
- gem 'factory_bot_rails'
+ gem 'factory_bot_rails', require: false
あとは FactoryBot
を使いたい場所で require
すれば良い。
spec/support/factory_bot.rb
+ require 'factory_bot_rails'
+
RSpec.configure do |config|
config.include FactoryBot::Syntax::Methods
end