2013-02-21 5 views
9

私は最近、私のJavaScriptを単体テストするためにQUnitを使い始めましたが、ドキュメントの機能で少し混乱しています:expect()QUnitでテストを書くときにexpect()を使う理由は何ですか?

ドキュメントによれば、expect()をするように設計されている:

[S]試験内で実行することが予想されるどのように多くのアサーションpecify。

そして、ここでは、彼らが与える例です:

test("a test", function() { 
    expect(2); 

    function calc(x, operation) { 
    return operation(x); 
    } 

    var result = calc(2, function(x) { 
    ok(true, "calc() calls operation function"); 
    return x * x; 
    }); 

    equal(result, 4, "2 square equals 4"); 
}); 

私はここを参照してください唯一のものは、メンテナンスの悪夢です。アサーションをテストに追加するたびに、その番号を更新する必要があります。そうしないと、テストは失敗します。この種の機能には実用的なアプリケーションがありますか?

+1

バグを知っている誰かからの完全な推測QUnit:無限ループに対するガードとして使用できます。それは最小限ではなく、最大限の制限を課しているようですので、 'expect(100)'(またはそれに類似する)を使うことができます。 –

+1

これは間違っています。これは最小値でも最大値でもなく、期待するアサーションの正確な量を定義します。その数が肥満の以下であれば、テストは失敗します。 – Odi

答えて

10

私がここに見るのは、メンテナンスの悪夢です...この種の機能の実用的なアプリケーションはありますか?

まあ、expectはグループ化された意味のあるタスクを使用することを意味します。それは例えば、テストイベントやコールバックのために便利です:あなたはわずか2または3アサーションが期待されている小さなテストにグループ化された意味のある作業を続ける場合

test('trigger an event', function() { 
    expect(1); 

    $('div') 
    .on('click', function() { ok(1) }); 
    .trigger('click'); 
}); 

それは悪夢になっていません。

+3

少し詳しく説明すると、非同期コードをテストするときに、非同期イベントが発生せず、テストが実行されない可能性があります。その場合は、静かにスキップされたテストではなく、失敗が必要です。 – adamesque

3

これは、実行できないテストが何らかの形で書かれていないことを保証するための保護手段として使用できます。予想される数のテストを書く習慣があれば、何らかの理由で1つのテストが何らかの理由で隠されているテストスイートを作成した場合、QUnitはこれを実行する前にこれを選択します。

関連する問題