如何在角度js中测试$ http调用?

时间:2015-12-18 15:36:05

标签: angularjs angularjs-directive angularjs-scope jasmine karma-jasmine

我正在尝试使用karma和jasmine测试我的 $ http 请求。我创建一个控制器并注入服务。在服务中我调用$ http service.I需要测试该服务我将如何测试这项服务这是我的控制器。

angular.module('app',[]).controller('first',function($scope,data){
    $scope.name='test';
    data.getData().then(function(data){
          console.log(data);
    })

}).factory('data',function($http){
    return{
        getData:getData
    }

    function getData(){
             return $http.get('data.json').success(successCall).error(errorcallback)
    }

    function   successCall(data){
          return data
    }
    function   errorcallback(data){
        return data
    }
})

这里是plunker http://plnkr.co/edit/POryyDUc8bvvfvI5Oap7?p=preview

我这样开始

describe('http controller test', function () {

    var $rootScope,
        $scope,
        controller;

    beforeEach(function(){
        module('app')  ;

        inject(function($injector){
            $rootScope  =  $injector.get('$rootScope') ;
            $scope=$rootScope.$new();
            controller =$injector.get('$controller')('first',{$scope:$scope})
        })
    })

    describe('Init value',function(){
        it('check name value',function(){
            expect($scope.name).toEqual('test');
        })

    })

    it('it should be true',function(){
        expect(true).toBeTruthy();

    })
})
你可以告诉我如何在控制器中存在服务依赖性的情况下编写测试吗?如何在jasmine中测试$ http请求?在我的控制器中有一个服务依赖。如何在我的测试文件中注入它?

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式注入data服务:

 describe('http controller test', function () {
    var $rootScope,
        $scope,
        data,
        controller;

     beforeEach(module('app'));

     beforeEach(inject(function ($controller, $rootScope, $state, _data_) {
        scope = $rootScope.$new();
        state = $state;
        data = _data_;
        controller = $controller('first',{$scope:$scope});
     });

     it('data service should be defined',function(){
         expect(data).toBeDefined();
     });
});

有一个关于使用Angular和Jasmine here测试promise的示例以及使用$ httpBackend测试$ http promises here的示例。