AngularJS Jasmine测试get-request

时间:2014-03-13 09:18:19

标签: angularjs jasmine 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;
            });
        }
    };
});

我的测试是这样的:

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)

2 个答案:

答案 0 :(得分:25)

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

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

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

您只能定义其中一个。

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

答案 1 :(得分:1)

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

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

使用when我想要在调用服务时定义响应内容,并使用expect我想检查方法是否被调用。

这不起作用(虽然有时会这样,但我不知道为什么)。我猜不知道expect覆盖了when,因此我得到了

  

错误:未定义响应!

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

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

我不知道为什么框架会以这种方式运行。如果有人知道你在这里解释它以改善答案会很好