30

私はRSpecテストを書き始めたばかりで、thoughtbotのスタイルガイドに出くわしました。これはlet、、、および(とりわけ)let!に対して推奨しています。beforesubject

他のいくつかの場所でも同様の提案を読んだことがありますが(古いRSpecドキュメントの警告を含むbefore(:all))、それらに対する実際の議論を見つけることができないようです。

したがって、問題は次のとおりです。

テストでこれらのメソッドを使用すべきではないのはなぜですか?より良いアプローチは何ですか?

4

3 に答える 3

31

興味深い質問です。私ももっと知りたいことがあります....だから少し掘り下げて、ここに私が発見したものがあります:

letなどについてのソートボット スタイル ガイド口述。

  1. スタイル ガイドの以前のバージョンでは、そのステートメントにはさらに多くの説明があります。

    its、let、let!、specify、subject、およびその他の DSL は避けてください。明確さと一貫性を優先します。

  2. ソートボットの人々が let name let's notに投稿しました。Github Commit Comment の会話へのリンクも参照してください。

  3. 最近のポッドキャストの 1 つで、 ThoughtBot の CTO であるJoe Ferrisletは、なぜandを使用するのが得策ではないのかを説明していますsubject。27分 37 秒から 5 分間、 「 Something Else Was Smellier」というタイトルのポッドキャストをチェックしてください。

  4. アンチパターン「ミステリー ゲスト」をテストすることは、 ThoughtBot の古いブログ投稿で詳細に説明されており、使用しない主な理由letとその従兄弟です。

上記のすべてについての私の理解を非常に簡潔に要約すると、

et al を使用letすると、テスト内で何が起こっているのかを一目で理解することが難しくなり、接続を作成するのに時間を費やす必要があります。

多くの労力をかけずに理解しやすいようにテストを記述します。

さらに、letテストで自由に使用すると、テスト間で過度に共有されるだけでなく、暗黙的common fixturesになります。つまり、適用されない場合でも、記述されているすべてのテストに対して開始する共通のフィクスチャがあります。

前(:すべて)

使用に反対する議論before(:all)は単純明快です。古いrspecドキュメントで説明されているように:

警告: before(:all) および after(:all) の使用は、サンプル間に依存関係が生じるため、一般的に推奨されません。それでも、自分が何をしているのかを知っていれば、非常にコストのかかる操作に役立つかもしれません。

before(:all) は、ExampleGroup の開始時に 1 回だけ実行されます。そのため、サンプル間に依存関係が誤って導入される可能性があります。テストが理解しにくいというソートボットの主張は、これにも当てはまります。

結論として、より良い仕様を書くためのアドバイスは次のようです。

  1. 一目で理解できるようにテストを記述します。
  2. あなたが何をしているのかを知ってください。
于 2012-10-13T03:54:06.763 に答える
1

its、let、let!、specify、before、subject は避けてください。

本当に?これにより、RSpec DSL の下から脚が切り取られます。test/unit の使用に戻ることもできます。

回避する理由についてlet、Thoughtbot は次のように述べています。私はそれらの知恵の真珠を興味を持って待ちますが、それまでの間、スタイルガイドを一粒の塩で取ってください.

編集

前述のブログ投稿は、興味深い読み物になります。

于 2012-10-17T05:10:38.753 に答える