14

我有一个工厂来执行一个获取请求,我想测试一下。不幸的是,业力测试告诉我 $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;
            });
        }
    };
});

我的测试是这样的:

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

2 回答 2

25

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

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

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

您只能定义其中之一。

查看ngMock httpBackend文档以获取更多信息。

于 2014-03-13T09:40:26.973 回答
1

以防万一它有帮助,因为它发生在我身上,尽管这不是问题的确切情况。我有这两行:

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

when想定义调用服务时要响应的内容,并且expect我想检查是否调用了该方法。

这不起作用(尽管有时它会起作用,但我不知道为什么)。我想不知何故expect是压倒一切的when,因此我得到了

错误:未定义响应!

解决方案是删除该when子句并添加respond()expect

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

我不知道为什么框架会这样。如果有人知道你在这里解释它以改进答案会很好

于 2016-04-28T15:04:25.420 回答