2016-05-11 5 views
0

ジャスミンカルマを開始しました。 テストが原因次のエラーに失敗している:私は、すなわち$ httpとまだ不明プロバイダエラーを取得$ qをすべての依存関係を提供してきたテスト工場toBeDefinedエラー

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 

。 ファクトリーはapp.coreモジュール内に記述されています。これはカルマのconfファイルに が含まれています

何が欠けていますか? 工場は、次のHTTP工場をテストプロジェクト

ユニットinthe正常に動作します

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

}) 


})(); 

答えて

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