Requirejs Backbone Collectionテスト


簡単なSPAアプリを少しずつゆっくり書いていく過程で、再構築を容易にするためにテストを書かなければなりません.

Backbone Collection


Bacbkboneは主に3つの部分から構成されています
  • model:データを作成し、データ検証を行い、サーバに破棄または保存します.
  • collection:要素を追加したり、要素を削除したり、長さを取得したり、並べ替えたり、比較したりする一連のツールメソッドは、はっきり言ってmodelsを保存する集合クラスです.
  • view:htmlテンプレートのバインド、インタフェース要素のバインドイベント、初期のレンダリング、モデル値の変更後の再レンダリング、インタフェース要素の破棄など.

  • モデルとCollectionを簡単に定義しました
    define(['backbone'], function(Backbone) {
        var RiceModel = Backbone.Model.extend({});
        var Rices = Backbone.Collection.extend({
            model: RiceModel,
            url: 'http://localhost:8080/all/rice',
            parse: function (data) {
                return data;
            }
        });
        return Rices;
    });
    

    データを取得するには、次のようなテストを作成します.
    define([
        'sinon',
        'js/Model/Rice_Model'
    ], function( sinon, Rices) {
        'use strict';
    
        beforeEach(function() {
            this.server = sinon.fakeServer.create();
            this.rices = new Rices();
    
        });
    
        afterEach(function() {
            this.server.restore();
        });
    
        describe("Collection Test", function() {
            it("should request the url and fetch", function () {
                this.rices.fetch();
                expect(this.server.requests.length)
                    .toEqual(1);
                expect(this.server.requests[0].method)
                    .toEqual("GET");
                expect(this.server.requests[0].url)
                    .toEqual("http://localhost:8080/all/rice");
            });
    
        });
    });
    

    ここではsinon fakeを使って簡単なserverを作りました
    this.server = sinon.fakeServer.create();
    

    これにより、fetchのときにresponseをmockすることができます.このとき、ここのURLが私たちが望んでいるURLかどうかをテストすることができます.
                this.rices.fetch();
                expect(this.server.requests.length)
                    .toEqual(1);
                expect(this.server.requests[0].method)
                    .toEqual("GET");
                expect(this.server.requests[0].url)
                    .toEqual("http://localhost:8080/all/rice");
    

    これにより、簡単にテストした書くことができます.