環境
OS: macOS Bir Sur
Ruby: 3.1.2
Rials: 7.0.3.1
rspec-rails: 5.1.2
発生した問題
Railsチュートリアルの11章を進めていた際、Action Mailerのプレビューコードを実装後に「http://localhost:3000/rails/mailers/user_mailer/account_activation」を確認した際に「Unknown action Mailer preview 'user_mailer/account_activation' not found」というエラーが発生した。
原因と解決方法
原因はテストをデフォルトで使用されるminitestではなく、RSpecに変更したこと。
「rails generate mailer コントローラ名 アクション名」を実行した際に、デフォルトでは、test/mailers/previews/コントローラ名_preview.rbファイルが作成されるが、testファイル以下を削除していたせいか、またはRSpecを導入したことで、「spec/mailers/previews/user_mailer_preview.rb」に上記ファイルが作成された。
Railsガイドでは、
これらのプレビュー用クラスは、デフォルトで
test/mailers/previews
に配置されます。このパスはpreview_path
オプションで設定できます。たとえばlib/mailer_previews
に変更したい場合はconfig/application.rb
に以下の設定を追加します。
config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews"
と説明されていました。
https://railsguides.jp/action_mailer_basics.html#メールのプレビュー
説明通りに下記のように、プレビュー用クラスの配置を以下のように設定したところ問題は解決しました。
require_relative "boot"
require "rails/all"
Bundler.require(*Rails.groups)
module SampleApp
class Application < Rails::Application
config.load_defaults 7.0
config.action_mailer.preview_path = "#{Rails.root}/spec/mailers/previews" #追加
end
end