Rails 8.0 and more | This Week in Rails
Rails 8.0がリリースされました
betaバージョンのリリースから約1ヶ月半ですね
ブログに書かれている内容はざっくり次のとおりです
Redisに依存しなくなる
SQLiteだけですべて動かすことができる(MySQLやPostgreSQLすらオプショナルになる)
基本的な認証の仕組みの提供
Action Controllerについてのガイドを更新するプルリクエストが出ています
フィードバックがある方は是非コメントしましょう
Active Recordに関する変更です
use_transactional_tests の設定をデータベースごとに上書きできるようになりました
まず前提として use_transactional_tests について
use_transactional_tests はデータベースの変更をトランザクション内で行うかどうかを設定するオプションです
通常 config.use_transactional_tests = true という設定が test_helper.rb または rails_helper.rb 内にデフォルトで設定されています
true のときは、各テストケースがトランザクション内で実行され、テストが終了した時点でそのトランザクションがロールバックされます
これにより、データベースに永続的な変更を残さず、他のテストへの影響を防ぐことができます
この設定を false にするケースとして、たとえば非同期ジョブを含む挙動をテストしたい場合が考えられます
テスト用のデータがトランザクション内にある(つまり、まだDBにコミットされていない)と、非同期ジョブのプロセスからデータにアクセスできないことがあります
この設定はテストケースのクラス単位で上書きできるようになっています
code:rb
class WorkerTest < ActiveSupport::TestCase
self.use_transactional_tests = false
test "parallel transactions" do
# トランザクションを作成するスレッドがいくつか起動される
end
end
今回のプルリクエストでは、データベースが複数ある場合を前提として、一部のデータベースだけトランザクションの利用をスキップできるようになりました
skip_transactional_tests_for_database というメソッドが追加され、データベース名のシンボルを渡すと、そのデータベースだけトランザクションを利用しなくなります
code:rb
class MostlyTransactionalTest < ActiveSupport::TestCase
self.use_transactional_tests = true
skip_transactional_tests_for_database :shared
end