2013-06-04 120 views
0

我想問一些關於茉莉間諜的事情。通常,我用狙這樣深入茉莉間諜

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/LogOntype is 'Get'等。提前

謝謝

回答

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') 

這將更好的可讀錯誤導致你可以看到這paramater是錯誤的。

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對象定義

+0

我不使用'sinon'有沒有辦法在core'jasmine'中做到這一點? – Ancient

+0

我還沒有在ajax請求上使用jasmine。也許這應該是幫助.. http://stackoverflow.com/questions/4662641/how-do-i-verify-jquery-ajax-events-with-jasmine –