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 回答