4

私はフロントエンド開発者で、TDD と BDD は初めてです。

私にはこの仕事があります。AJAX 呼び出しから受け取った json オブジェクトをテーブルに入力します。これをスイートと仕様でどのように説明しますか?

前もって感謝します

編集

MVC には BackboneJS を使用し、スパイ、スタブなどには sinon.js を使用しています。

4

3 に答える 3

2

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

通常、これは次のようになります。

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

また、サーバーが次のオブジェクトを返すと想定します{row: [1, 2, 3]} 。まず、サーバーが使用可能であることに依存したくないため、ajax応答をモックする必要があります。スパイを使用することで、データのモック、パラメータのチェック、および偽のリターンを実現できます。

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]};
});

結果を使用してコールバックを呼び出す前に、サーバーが受信する必要のあるURLとデータに関する期待値を上記で定義していることに注意してください。

最後に、テーブルにデータが入力されているかどうかを確認する必要があります。データやテーブルに関する情報は提供しませんが、jQueryを使用していると推測して、jasmine-jqueryを試してみてください。これを使用すると、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...

});
于 2012-04-09T11:01:49.797 に答える
0

あなたはすでに sinon.js を使用しているので、ajax 呼び出しから受け取ったオブジェクトをテストするために fakeServer を使用するのが最善の方法だと思います。ここで非常によく説明されています(偽のAjaxと偽のサーバーのセクション):

http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html

于 2012-05-25T13:10:02.600 に答える
0

You want to look at the asynchronous test facilities built into jasmine.

Specifically waitFor and run.

To explain quickly: you can run an Ajax query and have it return true on success. You wait for that function and then run your test.

于 2012-04-08T22:59:13.817 に答える