Ruby on Rails - 抽象クラスの Rspec テストを作成する
概要
私は、DB に含まれるすべてのモデルに特定のフィールドがあることを確認する検証を含めるために、ApplicationRecord の一般的な機能を更新する必要があるプロジェクトに取り組んでいます。私はこれを次の方法で設定しました。
class MyCustomApplicationRecordClass < ApplicationRecord
self.abstract_class = true
validate :custom_validation
def custom_validation
...
end
end
次に、モデルは次の方法でこのクラスを継承します。
class MyModel < MyCustomApplicationRecordClass
...
end
検証は期待どおりに機能し、MyCustomApplicationRecordClass から継承する各クラスの機能が機能していることを確認するテストを作成できますが、このクラスの検証が期待どおりに動作していることを確認するテストを作成する方法に苦労しています。 「テスト」クラスを作成しようとしましたが、テストクラスがデータベース内のテーブルに対応していないというエラーが表示されました(もちろん、対応していません)。この検証が予想どおりに実行されていることをテストする最良の方法は何ですか?
解決策
この回答はオプションを提供します。抽象クラスをロードする TestClass を作成する場合、スキーマのロードをオフにすることができます。これにより、エラー メッセージが表示されなくなり、抽象クラスをテストできるようになります。
class TestClass < MyCustomApplicationRecordClass
def self.load_schema!
@columns_hash = {}
end
end