RSpecでテストしているRailsアプリに取り組んでいます。テストが終了するのをたくさん待った後、 GaryBernhardtのアドバイスとPaulAnnesleyによるこの有益な投稿に従い、Railsの絶対に必要な部分だけをロードして、テスト時間を短縮し、機能を抽出する階層型spec_helperをセットアップしました。私が個別にテストする別々のモジュールに。
これはある程度まで機能しています。ActiveSupport::Concern
問題は、ActiveRecord機能に基づいて構築されたインスタンスメソッドとクラスメソッドを備えたモジュール(拡張)があることです。たとえば、のような動的ファインダーに接続しfind_and_create_by_
ます。これまでは、モジュールを含むダミークラスを作成してテストすることができましたが、ActiveRecordモデルからモジュールにさらにロジックを移動したいと思います。
具体的な例としては、コールバック、バリデーター、メソッド委任などがあります。これらはすべて、アクセスしているAPIに関連しているという事実に関連しています。
私のテストでは2つの選択肢がありますが、今は行き詰まっています。
- モジュールで呼び出すすべてのActiveRecordメソッドをスタブおよび/またはモックします。これにより、テストは高速に保たれますが、テストコードが非常に複雑になる可能性があります。
- テストでactiverecordを必要とし、ダミークラスを継承さ
ActiveRecord::Base
せ、他のRailsモデルをテストするのと同じようにモジュールをテストします。これは遅くなりますが、テストコードをクリーンに保ちます。
モジュール内のコードを分離している理由は、Railsからコードを分離したいからです。後者のオプションは、私にはあまり魅力的ではありません。私はここで黒または白の答えを探していませんが、誰かがこの状況でのベストプラクティスへのアドバイスや指針を持っていますか?よろしくお願いします!