2014-03-13 133 views
14

我有一個工廠執行get請求,我想測試。不幸的是,業力測試告訴我沒有在$ httpBackend中定義的響應。AngularJS茉莉花測試get-request

AngularJs 1.2.14, 茉莉花2.0, 噶0.12.0

這裏是我的模塊,我想測試:

var appFactory = angular.module('appFactory', []); 

appFactory.factory('boxListService', function($http){ 
    return{ 
     getList: function(){ 
      return $http.get('/boxlist').then(function(result){ 
       return result.data; 
      }); 
     } 
    }; 
}); 

我的測試是這樣的:

describe('Module-Test', function() { 

    beforeEach(module('appFactory')); 

    it('should call $http.get in getList', inject(function (boxListService, $httpBackend){ 
     $httpBackend.expectGET('/boxlist'); 
     boxListService.getList(); 
     $httpBackend.flush(); 
     })); 
}); 

消息:

Error: No response defined ! 
at $httpBackend (D:/nodeJS/host/test_app/src/public/js/libs/angular/angular-mock.js:1206:13) 

回答

25

你必須定義預期的響應,以及預期的要求。它將具有以下格式:

$httpBackend.expectGET('/boxlist').respond(HTTP_STATUS_CODE, EXPECTED_RESPONSE); 

HTTP_STATUS_CODE是一個整數。 EXPECTED_RESPONSE是要返回的值(通常是Object Literal)。

可以定義只是其中之一。

ngMock httpBackend文檔瞭解更多信息。

+4

我看了這個大約5次,我才意識到還需要在expectGET上聲明響應。我的印象是,whenGET是唯一需要申報的地方。可以肯定地說,我們必須對whenGET和expectGET兩者作出迴應嗎? – binarygiant

1

萬一它有助於而且因爲它發生在我身上,雖然它不是問題的確切情況。我有以下兩行:

$httpBackend.whenGET(myService.serviceURL).respond(myMock); 
$httpBackend.expectGET(myService.serviceURL); 

隨着when我想定義如何響應呼叫服務時,用expect我想檢查,該方法被調用。

這是行不通的(儘管有時會發生,但我不知道爲什麼)。我想以某種方式expect是壓倒when,因此我得到了

Error: No response defined !

解決的辦法是刪除when條款並添加respond()expect

$httpBackend.expectGET(myService.serviceURL).respond(myMock); 

我不知道爲什麼框架的行爲的方式。如果有人知道這將是很好的,你在這裏解釋它來改善答案