我正在使用Jasmine和Sinon测试Backbone.js应用程序。我正在尝试验证单击按钮单击是否调用Model的save()方法并处理成功回调,该回调向视图的el元素添加消息。我无法让sinon服务器触发Model的成功回调。
下面是我的规范看起来像是什么(beforeEach中的变量都是描述函数中的变量范围)。
beforeEach(function(){
server = sinon.fakeServer.create(); //create the fake server
server.respondWith([200, { "Content-Type": "text/html", "Content-Length": 2 }, "OK"]); //fake a 200 response
loadFixtures('signup_modal.html'); //load the fixture
element = $("#signupModal");
specSignUp = new SignUp();
signUpView = new SignUpView({model : specSignUp, el: $("#signupModal")});
});
这就是实际测试的结果:
it("Should call send request",function(){
element.find("#signupButton").trigger('click'); //click the button which should trigger save
server.respond(); //fake the response which should trigger the callback
expect(element).toContain("#message");
});
在尝试构建此实现时,我创建了一个简单的回调方法,向我显示成功回调是beign触发的:
sendRequest: function(){
console.log("saving");
this.model.save(this.model.toJSON(),{success: function(data){
console.log("success");
iris.addMessage(this.$("#messageContainer"),"Thank you");
}});
}
当我运行测试时,控制台显示“正在保存”但成功回调未被调用。
答案 0 :(得分:4)
Backbone希望响应文本是有效的JSON,并且由于server.respondWith()
方法中的响应“OK”而被轰炸。
将方法更改为:
server.respondWith([200, {"Content-Type":"text/html","Content-Length":2}, '{"OK":"True"}']);
正在成功处理成功回调。