2

RSpecでテストしているRailsアプリに取り組んでいます。テストが終了するのをたくさん待った後、 GaryBernhardtのアドバイスとPaulAnnesleyによるこの有益な投稿に従い、Railsの絶対に必要な部分だけをロードして、テスト時間を短縮し、機能を抽出する階層型spec_helperをセットアップしました。私が個別にテストする別々のモジュールに。

これはある程度まで機能しています。ActiveSupport::Concern問題は、ActiveRecord機能に基づいて構築されたインスタンスメソッドとクラスメソッドを備えたモジュール(拡張)があることです。たとえば、のような動的ファインダーに接続しfind_and_create_by_ます。これまでは、モジュールを含むダミークラスを作成してテストすることができましたが、ActiveRecordモデルからモジュールにさらにロジックを移動したいと思います。

具体的な例としては、コールバック、バリデーター、メソッド委任などがあります。これらはすべて、アクセスしているAPIに関連しているという事実に関連しています。

私のテストでは2つの選択肢がありますが、今は行き詰まっています。

  1. モジュールで呼び出すすべてのActiveRecordメソッドをスタブおよび/またはモックします。これにより、テストは高速に保たれますが、テストコードが非常に複雑になる可能性があります。
  2. テストでactiverecordを必要とし、ダミークラスを継承さActiveRecord::Baseせ、他のRailsモデルをテストするのと同じようにモジュールをテストします。これは遅くなりますが、テストコードをクリーンに保ちます。

モジュール内のコードを分離している理由は、Railsからコードを分離したいからです。後者のオプションは、私にはあまり魅力的ではありません。私はここで黒または白の答えを探していませんが、誰かがこの状況でのベストプラクティスへのアドバイスや指針を持っていますか?よろしくお願いします!

4

2 に答える 2

1

オプション1は興味をそそられるように見えますが、私見の危険に満ちています。あなたがしなければならないモックとスタブの範囲は、ラムズフェルドの証明された「未知の未知数」の1つによく似ています。最終的には、ActiveRecordのすべてをスタブアウトすることになりますか?

あなたがそれを機能させることができたとしても、それはActiveRecordの将来の変更を許容しますか?新しいバージョンに対応するために、モック/スタブを更新する必要がありますか?

この目的のためにActiveModel/ActiveRecordを置き換えることができるモックライブラリを見てみたいです。とはいえ、そのようなものを構築するのに多くの時間を費やすことになる可能性のあるものを費やすことに寛容でない限り、オプション2を使用する方が良いと思います。

于 2013-01-09T07:03:46.587 に答える
1

テストプロセスをスピードアップするために私のために働く解決策は、スポークとガードを組み合わせることです。ガードは実際にはテストを監視して実行することですが、それはあなたのプロセスをスピードアップします。

私は適切な記述を持っていませんが 、警備員と一緒にスポークを設定する際にこの要点を参照することができます

これらは私が使用したリソースです

ガード

スポーク

HTH

于 2013-01-09T06:57:00.917 に答える