2012-06-06 30 views
1

我的一个骨干视图的初始化函数中包含以下代码:如何使用jasmine测试包含jquery.jsp的主干代码?

$.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}); 
+0

能告诉你,请你如何创建一个视图实例? – theotheo

回答

1

你或许应该尝试使用sinon.js。这是一个伟大的图书馆,用于存根和嘲讽,其中包括mocking 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/

+0

工作,谢谢! – Kai

相关问题