测试工厂toBeDefined错误

时间:2016-05-11 13:49:21

标签: angularjs unit-testing karma-jasmine

刚开始茉莉花业力。 由于以下错误,测试失败:

PhantomJS 2.1.1 (Mac OS X 0.0.0) dataservice spec should have dataservice be defined FAILED
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
    Error: [$injector:unpr] Unknown provider: dataserviceProvider <- dataservice

我提供了所有依赖项,即$ http和$ q仍然会收到未知的提供程序错误。 工厂已在app.core模块中描述,我有 包含在业力配置文件中

我缺少什么。 工厂

工厂正常工作

单元测试以下http工厂

(function() {
    'use strict';
    angular
        .module('app.core', [])
        .factory('dataservice', dataservice);

    dataservice.$inject = ['$http', '$q'];

    function dataservice($http, $q) {
        return {
            makeRequest: makeRequest,
        };


        function makeRequest(params) {
            var defer = $q.defer();
            if (params.method == "GET") {
                $http({
                        method: params.method,
                        url: params.url,
                        headers: params.headers
                    })
                    .then(function(response) {
                            defer.resolve(response);
                        },
                        function(response) {
                            defer.reject(response);
                        })
            }
            if (params.method == "POST") {
                $http({
                    method: params.method,
                    url: params.url,
                    data: params.parameters,
                    headers: params.headers
                })

                .then(function(response) {
                            console.log(response);
                            defer.resolve(response);
                        },
                        function(response) {
                            console.log("error");
                            defer.reject(response);
                        })
            }
            return defer.promise;

})();

测试规范:

(function(){
'use strict'
describe('dataservice spec',function(){
    var dataservice;
    beforeEach(function($injector){
        angular.module('app.core');
        //dataservice=$injector.get('dataservice')
    });
    beforeEach(inject(function (_dataservice_,_$http_,_$q_) {
    dataservice = _dataservice_;
    $http=_$http_;
    $q=_$q_;
  }));
    // beforeEach(inject(function() {
 //      var $injector = angular.injector(['app.core']);
 //      dataservice = $injector.get('dataservice');
 //    }));
    it('should have dataservice be defined', function () {
    expect(dataservice).toBeDefined();
  });

})


})();

1 个答案:

答案 0 :(得分:0)

您需要按如下方式更新脚本:

(function () {
    'use strict';
    angular
      .module('app.core', [])
      .factory('dataservice', dataservice);

    dataservice.$inject = ['$http', '$q'];

    function dataservice($http, $q) {
      return {
        makeRequest: makeRequest
      };

      function makeRequest(params) {
        var defer = $q.defer();
        if (params.method == "GET") {
          $http({
            method: params.method,
            url: params.url,
            headers: params.headers
          })
            .then(function (response) {
              defer.resolve(response);
            },
            function (response) {
              defer.reject(response);
            })
        }
        if (params.method == "POST") {
          $http({
            method: params.method,
            url: params.url,
            data: params.parameters,
            headers: params.headers
          })

            .then(function (response) {
              console.log(response);
              defer.resolve(response);
            },
            function (response) {
              console.log("error");
              defer.reject(response);
            })
        }
        return defer.promise;
      }
    }
  })();

单元测试:

(function () {
  'use strict'
  describe('dataservice spec', function () {
    var dataservice,
      $http,
      $q;

    beforeEach(module('app.core'));

    beforeEach(inject(function (_dataservice_, _$http_, _$q_) {
      dataservice = _dataservice_;
      $http = _$http_;
      $q = _$q_;
    }));

    it('should have dataservice be defined', function () {
      expect(dataservice).toBeDefined();
    });
  })
})();

请确保您正确加载模块:beforeEach(module('app.core'));