我的骨干视图的一个初始化函数包含以下代码:
$.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 :(得分: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();