元ネタは Rails 5.2 で入る kirs さんによる以下の PR となる。
たとえば、RSpec でテストを実行しようとした際に db:migrate
を実行していないものがあるときの振る舞いが以下のとおりになる。
% bin/rspec Migrations are pending. To resolve this issue, run: bin/rails db:migrate RAILS_ENV=test
これまではこの後に読むことのないバックトレースがだらっとついていたので、ノイズが減って良いと思う。
Rails 標準で採用されていない RSpec で Rails アプリケーションを開発しているケースでは rspec-rails を使っていると思うが、spec/spec_helper.rb か spec/rails_helper.rb で ActiveRecord::Migration.check_pending!
あるいは ActiveRecord::Migration.maintain_test_schema!
を使っている箇所があれば、以下のように変更することで同様の対応となる。
-ActiveRecord::Migration.check_pending! +begin + ActiveRecord::Migration.check_pending! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end
既存の Rails アプリケーションに関してはこのような diff を入れておくと良い。さらに言うと Rails 5.2 へのアップグレードと独立した話なので、いまからでも既存の Rails アプリケーションの spec/spec_helper.rb に手を入れておけば良いと思う。
新規については rspec-rails のテンプレートの方には PR を出してマージされているので、次の rspec-rails 3.7.3 あたりでのテンプレートからそのようになる予定。