2012-04-08 8 views
4

私はフロントエンドの開発者であり、TDDとBDDを初めて使用しています。学習ユニットテストとジャスミン

私はこの作業をしています。 AJAX呼び出しから受け取ったjsonオブジェクトをテーブルに取り込みます。私はこれをスイートと仕様でどのように記述しますか?事前

EDIT

おかげで私は

答えて

2

あなたが使用するライブラリについてはあまり言及していないので、例として、ajaxリクエストはjQueryを使用したGETリクエストで構成されていると仮定します。

通常、これはのようになります。また、私はあなたが頼ることにしたくないので、サーバーは、AJAXの応答を模擬する必要がまず第一に、次のオブジェクト{row: [1, 2, 3]} を返すことを前提としています

$.ajax({ 
    url: 'http://server/populate_table', 
    data: {foo: 'bar'}, 
    success: populate_table 
}); 

あなたのサーバー上で利用可能です。モックは、パラメータのチェックやデータの偽のリターンは、次のようなスパイを使用することによって達成することができます:あなたが前にサーバによって受信されるURLとデータに関する期待を定義する方法上記

var ajaxMock = spyOn($, 'ajax').andCallFake(function (options) { 
    expect(options.url).toEqual('http://server/populate_table'); 
    expect(options.data.foo).toEqual('bar'); 
    options.success({row: [1, 2, 3]}; 
}); 

お知らせその結果でコールバックを呼び出します。

最後に、テーブルに値が設定されているかどうかを確認する必要があります。あなたはデータやテーブルに関する情報を提供しませんが、再びjQueryを使用すると推測して、jasmine-jqueryを試してみてください。 DOMを使用すると、DOM上の期待を簡単に記述でき、拡張ドキュメントを見ることができます。あなたがテストしたいものに落ち着くたら、あなたの完全なテストは、のようになります。

it('populates the table making a JSON call', function() { 
    var ajaxMock = spyOn($, 'ajax').andCallFake(function (options) { 
     expect(options.url).toEqual('http://server/populate_table'); 
     expect(options.data.foo).toEqual('bar'); 
     options.success({row: [1, 2, 3]}; 
    }); 

    $.ajax({ 
     url: 'http://server/populate_table', 
     data: {foo: 'bar'}, 
     success: populate_table 
    }); 

    expect($('#mytable')).toExist(); 
    // DOM specific expectations go here... 

}); 
0

あなたはジャスミンに組み込まれてasynchronous test施設を見たいスタブなど、スパイのためのMVCのためのBackboneJSとsinon.jsを使用しています。

特にwaitForrunです。

すぐに説明すると、Ajaxクエリを実行して、成功した場合にtrueを返すことができます。あなたはその機能を待ってからテストを実行します。

+0

はまた、モッキング&スタブを見て:非常によく(フェイクAjaxや偽のサーバー部分)がここに記載されています。 http://sinonjs.org/(私はそれを使用していませんが、それはきれいに見えます) – d2kagw

+0

すべてのスパイスウィングスノーサプライは、私が信じているジャスミンです。私たちはジャスミンの中でちょうどスパイの方法を使用します。私たちは、Ajaxリクエストを発することを望んでいます。私たちの心の中でのテストのポイントは、ユーザーがコードを使って経験することを正確に模倣することです。 – tkone