2015-03-13 123 views
0

我在我的角度模塊上有一個指令,我正在嘗試編寫測試。首先,我不清楚如何正確測試這個指令,但在這一點上,當業力運行測試時,我得到以下錯誤。

Unknown provider: $angularFileUploadProvider <- $angularFileUpload 

這是我的測試。

describe('Testing onlyDigits directive', function(){ 

    var elm, scope; 

    beforeEach(module('jobBoard')) 

    beforeEach(inject(function($route, $filter, $angularFileUpload, $animate, $rootScope, $compile) { 
     elm = angular.element('<input id="testinput" type="number" onlyDigits />'); 
     scope = $rootScope; 
     $compile(elm)(scope); 
     scope.$digest(); 
    })); 

    it('should limit input to numbers and decimal', function(){ 

    }) 
}) 

這是我的模塊指令...

angular.module('jobBoard', ['ngRoute', 'jobFilters', 'angularFileUpload','ngAnimate']) 
    .config(['$routeProvider', '$locationProvider','$sceDelegateProvider', 'templates', function($routeProvider, $locationProvider, $sceDelegateProvider, templates){ 
     //routes ommitted for brevity 
    } 
]).directive('onlyDigits', function() { 
    return { 
     restrict: 'A', 
     require: '?ngModel', 
     link: function (scope, element, attrs, ngModel) { 
      if (!ngModel) return; 
      ngModel.$parsers.unshift(function (inputValue) { 
       var digits = inputValue.split('').filter(function (s) { return (!isNaN(s) && s != ' ' || s == '.'); }).join(''); 
       ngModel.$viewValue = digits; 
       ngModel.$render(); 
       return digits; 
      }); 
     } 
    }; 
}); 

,這裏是我的人緣配置文件

module.exports = function(config){ 
    config.set({ 

    basePath : './', 

    files : [ 
     'vendor/assets/javascripts/angular/angular.js', 
     'vendor/assets/javascripts/angular-route/angular-route.js', 
     'vendor/assets/javascripts/angular-animate/angular-animate.js', 
     'vendor/assets/javascripts/ng-file-upload-shim/angular-file-upload.js', 
     'vendor/assets/javascripts/ng-file-upload/angular-file-upload.js', 
     'vendor/assets/javascripts/angular-mocks/angular-mocks.js', 
     'app/assets/javascripts/components/**/*.js', 
     'app/assets/javascripts/view*/**/*.js', 
     'spec/javascripts/**/*_spec.js' 
    ], 

    autoWatch : true, 

    frameworks: ['jasmine'], 

    browsers : ['Chrome'], 

    plugins : [ 
      'karma-chrome-launcher', 
      'karma-firefox-launcher', 
      'karma-jasmine', 
      'karma-junit-reporter' 
      ], 

    junitReporter : { 
     outputFile: 'test_out/unit.xml', 
     suite: 'unit' 
    } 

    }); 
}; 

回答

0

你在你的茉莉beforeEach設置注射服務的很多:

beforeEach(inject(function($route, $filter, $angularFileUpload, $animate, $rootScope, $compile) { 
    // ... 
} 

您應該只注射服務,你實際上是使用在beforeEach功能:$rootScope$compile

beforeEach(inject(function($compile, $rootScope) { 
    // ... 
}); 

特別是$angularFileUpload服務,您試圖注入未在任何加載的模塊定義:'jobBoard'['ngRoute', 'jobFilters', 'angularFileUpload','ngAnimate']

+0

這就是我試圖用角度包裹我的頭。所以,即使模塊期待所有這些 - 'ngRoute','jobFilters','angularFileUpload','ngAnimate' - 你說我不需要注入它們? – 2015-03-13 19:34:39

+0

模塊在模塊定義中定義模塊依賴關係:'angular.module(「MyModule」,[「OtherModule」,「OtherModule2」])' 當模塊在測試中加載時'beforeEach(function(){module (「MyModule」);})',它會自動加載它的依賴關係。 您注入的內容不是_modules_,而是_services_。 如果你需要在你的函數中使用特定的服務,你只需要注入東西:'inject(function($ http){$ http.get(...);})''。 希望有助於:-) – tommes 2015-03-13 19:39:08

+0

它確實有幫助 - 有點;)但是,當我減少服務只有$ compile和$ rootScope,然後我得到這個錯誤 - 未知的提供者:$$ jqLit​​eProvider < - $$ jqLit​​e < - $ animate < - $ compile – 2015-03-13 19:46:26