AngularJS Jasmine测试get-request

mar*_*cel 14 jasmine angularjs karma-runner karma-jasmine

我有一个工厂来执行get请求,我想测试一下.不幸的是,业力测试告诉我$ httpBackend没有定义响应.

AngularJs 1.2.14,Jasmine 2.0,Karma 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;
            });
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

我的测试是这样的:

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();
      }));
});
Run Code Online (Sandbox Code Playgroud)

信息:

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

Pas*_*rer 25

您必须定义预期响应以及预期请求.它将具有以下形式:

$httpBackend.expectGET('/boxlist').respond(HTTP_STATUS_CODE, EXPECTED_RESPONSE);
Run Code Online (Sandbox Code Playgroud)

HTTP_STATUS_CODE是一个整数.EXPECTED_RESPONSE是要返回的值(通常是Object Literal).

您可以只定义其中一个.

有关更多信息,请查看ngMock httpBackend文档.

  • 在我意识到响应也需要在expectGET上声明之前,我看了大约5次.我的印象是,whenGET是唯一需要声明响应的地方.可以肯定地说,必须在whenGET和expectGET上声明一个响应吗? (4认同)