2014-04-07 106 views
0

有誰知道我可以測試使用Jasmine $ httpBackend對象發送了多少請求?我如何測試發送到Jasmine服務器的請求數

我有一個kendo網格,它是使用從RESTful服務獲得的數據構建的。

該網格還具有預過濾功能。這意味着您可以聲明一組條件,然後在構建網格時將條件與請求數據一起發送到服務器。

然後,在發送響應之前,應通過RESTful服務過濾數據。因此,響應將只包含符合標準的數據。

問題是,目前有兩個請求正在發送:一個用於數據,另一個用於標準。

我想編寫一個測試,確保只發送一個請求,用於原始數據,並且過濾由RESTful服務完成。

這裏是我的測試:

it('should send only one request to the server when getting data to build the grid', function() { 
    angular.mock.inject(function ($compile, $rootScope) { 
     var scope = $rootScope.$new(); 

     // THE CRITERIA 
     scope.myCriteria = { 
      "operator": "and", 
      "operands": [ 
       { 
        "property": "accountId", 
        "value": "1", 
        "constraint": "contains", 
        "ignoreCase": "true" 
       } 
      ] 
     }; 

     // THE ORIGINAL DATA 
     var respondData = [ 
      {accountId: '1', name: 'Account 1', status: 'active'}, 
      {accountId: '3', name: 'Account 3', status: 'active'}, 
      {accountId: '4', name: 'Account 4', status: 'active'} 
     ]; 

     // THE REQUEST TO GET THE DATA 
     $httpBackend.when('GET', "api/grid/accounts?crit=substringof('1',accountId)+eq+true").respond(respondData); 

     // BUILD THE GRID 
     // sg-data is the data from the RESTful service. 
     // sg-filters is the filtering criteria 
     var elem = $compile('<div sg-grid sg-data="api/grid/accounts" sg-columns="accountId,name,shortName,status" sg-filters="myCriteria"></div>')(scope); 

     $rootScope.$apply(); 
     $httpBackend.flush(); 
     /* 
     I want to do something like this: 
     expect($httpBackend.requests.length).toBe(1); 
     */ 
    }); 
}); 

回答

1

您應該使用expect而不是when,因爲你要斷言其請求被髮送。

$httpBackend.expect('GET', "api/grid/accounts?crit=substringof('1',accountId)+eq+true").respond(respondData); 
... 
$httpBackend.flush(); 
... 
$httpBackend.verifyNoOutstandingExpectation();  

最後一行驗證代碼是否發出了第一個請求。通過使用expect而不是when,我們驗證沒有發出第二個請求。如果代碼發出第二個請求,您將得到'沒有更多請求預期'錯誤。

他們描述請求的期望之間($httpBackend.expect)和後端定義($httpBackend.when)在AngularJS docs

請求預期差 提供一種方法,使有關的 應用程序的請求的斷言和定義的響應這些請求。如果預期的請求未被執行或者以 錯誤的順序進行,測試將會失敗 。

後端定義允許您爲您的 應用程序定義一個假後端,如果發出了特定請求,它不會斷言,或者 不是,它只是在發出請求時返回訓練有素的響應。測試 將通過測試期間是否進行請求。

+0

非常感謝您的答覆。 – Tone

+0

只是添加到上面的答案,當我檢查文檔時,我也發現這一點:afterEach(function(){http://Backend.verifyNoOutstandingExpectation(); $ httpBackend.verifyNoOutstandingRequest(); }); – Tone

+1

你說得對,我已將'verifyNoOutstandingExpectation()'添加到答案中 –

相關問題