1

バックボーンビューの初期化関数の1つに、次のコードが含まれています。

$.when(this.broadcasters.fetch(), 
       this.model.fetch(), this.call_types.fetch()).done(
          function(){
              do_important_stuff
          });

フェッチの結果はテストには関係ありませんが、ブロック内のコードはテストにとって重要です。

私の最初の考えはjasmine-ajaxを使用することでしたが、それは最新のリクエストへの応答のみをサポートし、実際には3つの異なるAJAXリクエストに応答する必要があります。

モックオンするオブジェクトがないため、実際にモックアウトすることはできません(これは初期化関数であるため)。

結局、「do_important_stuff」を手動で実行することになりました。これは、コードをテストに複製するため、理想的ではないようです。

編集:

リクエストに応じて、ビューインスタンスの作成方法は次のとおりです。

var responder = new EmailResponder({model: email, el: some_element, reply: true});
4

1 に答える 1

1

おそらくsinon.jsを使用してみてください。これは、 XHRのモックを含む、スタブとモックに最適なライブラリです。例を見てください:

var Model = Backbone.Model.extend({});
var Collection = Backbone.Collection.extend({
    model: Model,
    url: "/api/models"
});

var server = sinon.fakeServer.create();
server.respondWith("/api/broadcasters", [
    200,
    {"Content-Type": "application/json"},
    JSON.stringify({"data": "foo"})
]);

server.respondWith("/api/models", [
    200,
    {"Content-Type": "application/json"},
    JSON.stringify({"data": "bar"})
]);

server.respondWith("/api/call_types", [
    200,
   {"Content-Type": "application/json"},
    JSON.stringify({"data": "baz"})
]);

$.when($.get('/api/broadcasters'), $.get('/api/call_types'), collection.fetch()).then(function() {
    console.log('here it is!');
});

server.respond();

http://jsfiddle.net/theotheo/DxVkr/

于 2012-06-06T23:53:02.313 に答える