Techioz Blog

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