2011-02-07 5 views
1

この質問はRSpecサンプルグループと英語の例をどのようにして最適な名前にするかについてです。WebappsのRSpecサンプルグループの命名

は、私は(functionally equivalentある)とit RSpecの、describecontextであなたに完全な文を与えることになっていることを理解しています。たとえば、

describe "Log-in controller" do 
    context "with logged-in user" do 
    it "redirects to root" do 
     ... 
    end 
    end 
end 

読み込みLog-in controller with logged-in user redirects to rootです。驚くばかり。

しかし、私は(カピバラを使用して)ajaxyページ上のすべてのコンポーネントをテストする必要があります私のアプリケーションで、私はこのような例のグループを持っている傾向がある:

describe "blog post" do 
    describe "content" do 
    it "is displayed" 
    end 
    describe "comment" do 
    it "is displayed" 
    describe "editing" do 
     it "works" # successful comment editing 
     it "requires logged-in user" # error case 1 
     it "requires non-empty body" # error case 2 
    end 
    end 
    describe "comment form" do 
    it "works" # successful comment submission 
    it "requires valid email address" # error case 1 
    it "requires non-empty body" # error case 2 
    end 
end 

私はここ2アンチパターンを参照してください。

  1. ネストされた説明は、文章として読み込まれません。もちろん、誰かが "blog post:"の後にコロンを置くこともできます:

    describe "blog post" do 
        describe "'s content" do 
        it "is displayed" 
        end 
    end 
    

    または理想的に、私は

    describe "blog post" do 
        its "content" do 
        it "is displayed" 
        end 
    end 
    

    を書くだろうが、itsは属性アクセスについてです、と私はちょうどここに文字列を持っているので、それは不可能です。

    「ページコンポーネント」の問題を処理するには、より良い方法がありますか?

  2. 機能のために、成功したケース(コメント提出のような機能)は、単にit "works"とマークされています。少なくとも簡潔でシンプルです - it "can be submitted and causes a comment to be added"よりやや好ましいと思います。それは明らかに何かのために言葉遣いを構成するためです。しかし、これを行うにはより良い、より自然な方法がありますか?

上記のexample-group;を再構成する方法についての提案を参照してください。

答えて

1

例が文法的に正しいと考えるべきではありません。あなたのテストで 'blog post content is'が表示されていなければそれはいいです。このテストは読みやすく簡単です。あなたが本当に望むのは、テストがうまくいかないときに何が失敗しているのかを理解できることです。

2つ目のポイントに関しては、「それはうまく機能しています」とは十分に説明できません。それは他人にあなたが「作品」の意味を知らせることはありません。実際に多くのことをテストしている場合は、例を分割することをお勧めします。

 
describe 'blog post' do 
    context 'creating a comment' do 
    it 'should require a logged-in user' 
    it 'should require a non-empty body' 
    it 'should require a valid email address' 
    it 'should create a new comment' 
    it 'should be submittable' 
    end 
end 
+0

興味深いことに面白い!私は、あなたの例を分かち合って「うまくいっている」と確信しているのかどうか分からないのですが、「提出可能」は本当に面白いテストではありません(ボタンが必要です)。 "、"新しいコメントは正しい著者を持っています "などは、通常、コードを複製して性能を失うことによって分割可能です(*本当に* Seleniumにとって痛い)。成功したケースでは、私は通常、KISSを適用し、機能性を発揮して、私が気にしていることに対して束の間の期待をしています。私は実際にそれらを分割することによって私のスペックの保守性が上がるのを見ない。 –

+0

私の擬似コードはガイドとしてのみ意味します。 「提出する必要があります」は分割してどのように提出してコメントを作成するかの例に過ぎません。私の要点は、各テストごとに異なるテスト条件が必要だということです。説明に 'と'を追加すると、分割が必要になります。あなたがSileniumでテストしているなら、私は100%カバレッジに行くことをお勧めしません。おそらく、まずモデルとコントローラのテストで同等のレベルのカバレッジを達成することができます。パフォーマンスと重複が心配な場合は、これらの問題を回避する背景条件を作成してください。 –

+0

私のテストを分割するとメンテナンスが容易になるとは思えません。 「コメントを投稿すると、JSから動的に追加されていることを確認し、正しい著者がいることを確認し、日付があることをチェックし、編集可能かどうかをチェックし、ページの再読み込み後もページにチェックします」あなたは実際にそれをいくつかのテストに分割することを主張します(簡潔な期待値列を持つのではなく)? Btw、「背景条件」はどういう意味ですか? ':speed =>:slow'な種類のメタデータ? –