我想问一下关于茉莉花间谍的事情。通常我会像这样使用间谍
function getAuthrize(id) {
$.ajax({
type: "GET",
url: "/Account/LogOn" + id,
contentType: "application/json; charset=utf-8",
dataType: "json"
});
}
spyOn($, "ajax");
getAuthrize(123);
expect($.ajax).toHaveBeenCalled();
但我想知道如果我想验证更多内容(如ajax调用中调用的url
是/Account/LogOn
,type is 'Get'
等等,那该怎么办。
提前致谢
答案 0 :(得分:0)
为此你需要使用假的服务器对象
像sinon.fakeServer
describe('view interactions', function(){
beforeEach(function() {
this.saveResponse = this.serverResponse.someObj.POST;
this.server = sinon.fakeServer.create();
this.server.respondWith(
'POST',
this.saveResponse.url,
this.validResponse(this.saveResponse)
);
});
afterEach(function() {
this.server.restore();
});
});
需要确保定义了this.serverResponse
对象
答案 1 :(得分:0)
要检查是否使用特定参数调用间谍,请使用toHaveBeenCalledWith
,如下所示:
expect($.ajax).toHaveBeenCalled({
type: "GET",
url: "/Account/LogOn" + id,
contentType: "application/json; charset=utf-8",
dataType: "json"
});
但是当JSON中只有一个字段出错时,这将成为一个非常难以阅读的错误。
另一种方法是使用mostRecentCall.args
:
var args = $.ajax.mostRecentCall.args[0];
expect(args.type).toEqual('GET')
expect(args.url).toEqual('/Account/LogOn123')
这将导致更好的可读错误,因为您可以看到哪个参数错误。