测试工厂 toBeDefined 错误

Testing factory toBeDefined error

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

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 模块中进行了描述,我有 包含在 karma conf 文件中

我错过了什么。 工厂在项目中运作良好

对以下 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();
  });

})


})();

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

(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'));