lib/tasks
フォルダーに次の rake タスクが定義されています。
namespace :db do
namespace :test do
task :prepare => :environment do
Rake::Task["db:seed"].invoke
end
end
end
さて、これが行うことは、実行時にテスト DB をシードすることrake db:test:prepare
です。これを行うのは、アプリが機能するために存在しなければならないいくつかの基本的なレコードがあるためです。これらはオプションではなく、実際にモックすることはできません。
これとは別に、開発と本番でアセット ストレージに S3 を使用するモデルがありますが、テストには S3 を使用したくありません。モデルに、ストレージ パスを S3 からローカルに変更するメソッドを設定しました。Rails.env.test?
ただし、これは機能しません。rake タスクが呼び出された環境を認識しているかどうか疑問に思っていましたが、そうではないことが判明しました。これをseeds.rbファイルの先頭に置きます:
puts "Environment Check: Rails Environment = #{Rails.env}"
案の定、タスクを実行すると、次のように出力されます。Environment Check: Rails Environment = development
では、テスト DB をシードしているときに、テスト DB をシードしていることを認識できるように、この rake タスクをやり直すにはどうすればよいでしょうか??