ActiveStorageを導入してテスト実行した際に`undefined method ‘name’ for nil:NilClass`が出た時の対応

最終更新日

アイキャッチ

概要

みなさん。テストは書けてるでしょうか?
今回はActiveStorageを導入してテストを実行した際に、全然心当たりのないundefined method 'name' for nil:NilClassが出た際のTIPSです。
結論から言うと、config/envinronments/test.rbに設定が漏れていたのが原因でした。
binding.pryで結構深くまで掘らないと気づけなかったですが、超単純なミスでorz状態です。

目次

  1. 環境
  2. 解決方法
  3. 原因
  4. まとめ

環境

  • rails 6.0.1
  • rspec-rails 4.0.1
  • activestorage 6.0.1

解決方法

  • config/environments/test.rb
config.active_storage.service = :test

たったこれだけ。こちらの設定を有効化するだけです。もともとコメントアウトされています。

原因

  • activestorage-6.1.0/app/models/active_storage/blob.rb:52
after_initialize do
  self.service_name ||= self.class.service.name
end

こちらの処理でself.class.serviceがnilとなってしまい、nameが呼び出せずエラーとなっていました。
serviceがないってところで、そういえばconfigがあったなと思い解決策の設定を思い出しました…(もっと早く気付けよ…)

まとめ

設定ミスしている自分が悪いんですが、エラーメッセージから対応方法が全然わからず時間がかかりました。もうすこし早くraiseしてくれると嬉しいな…
あまりこんなミスする方はいないと思いますが、誰かの助けになれば幸いです。

stmon19

遊びが一番 人生遊び 好きにまみれてます