这些天我正试图为我的第一个严肃的Backbone应用程序进行一些测试。到目前为止我没有遇到正常测试的问题,但现在我不得不尝试设置异步测试。
如果我尝试保存具有无效属性的模型,我的服务器API基本上会返回一个包含500 HTTP代码错误的页面,我想检查这是否会在Backbone中触发正确的“错误”状态。
我试图以这种方式设置测试:
asyncTest("Test save Model function", function(){
expect(1);
var user = new User({});
var err_spy = this.spy();
user.on('error',err_spy);
user.save(user,{error:function(){
start();
equal( err_spy.callCount, 1, "Callback 'error' called once");
}});
});
问题是保存功能的错误回调会覆盖模型中的错误回调,因此触发它的唯一方法是手动执行:
user.trigger("error");
我不认为这是一种正确的测试方法,因为在我的生产环境中,模型的保存功能没有错误回调,但另一方面我不知道如何告诉Qunit等待ajax响应评估测试断言。
有人可以建议我让它成功吗?谢谢!
答案 0 :(得分:1)
这样的事情应该可以解决问题。我要从内存开始,但是sinon假服务器应该允许你立即返回500错误状态,然后调用spied-on函数。您可能需要调整server.respondWith(...)调用。
asyncTest("Test save Model function", function(){
expect(1);
var user = new User({});
// Set up a fake 500 response.
var server = sinon.fakeServer.create();
server.respondWith(500, {}, "");
// Create the error callback.
var err_callback = function(){};
var err_spy = sinon.spy(err_callback);
user.save(user, {error: err_callback});
server.respond();
equal( err_spy.callCount, 1, "Callback 'error' called once");
server.restore();
});