1

У меня есть приложение с зависимостью от углового материала ngMaterialОшибки при выполнении тестов жасмина на angularjs приложения с ngMaterial зависимости

var sequencesApp = angular.module('sequencesApp', ['ngMaterial']); 

sequencesApp.controller('SequenceListCtrl', function ($scope) { 
    $scope.sequences = [ 
    {'name': 'Sequence 1', 
    'sequence': 'actgactgcatgctgctagctgcatgcta'}, 
    {'name': 'Sequence 2', 
    'sequence': 'atgcatcatcatcatctctgcatgcatcatctacacataatagcatcgatctcatctcacacatgcatgctgcatcta'}, 
    {'name': 'Sequence 3', 
    'sequence': 'atgcatacatcatcatctctgcatgcatcatctacacataatagcatcgatctcatctcacacatgcatgctgcatctaatgcatcatcatcatctctgcatgcatcatctacacataatagcatcgatctcatctcacacatgcatgctgcatctaatgcatcatcatcatctctgcatgcatcatctacacataatagcatcgatctcatctcacacatgcatgctgcatctaatgcatcatcatcatctctgcatgcatcatctacacataatagcatcgatctcatctcacacatgcatgctgcatctaatgcatcatcatcatctctgcatgcatcatctacacataatagcatcgatctcatctcacacatgcatgctgcatcta'} 
    ]; 
}); 

и я бег тестов с использованием жасмина и кармы с помощью следующего кода теста

describe('SequenceListCtrl', function(){ 

    beforeEach(module('sequencesApp')); 

    var $controller; 

    beforeEach(inject(function(_$controller_){ 
    // The injector unwraps the underscores (_) from around the parameter names when matching 
    $controller = _$controller_; 
    })); 

    describe('$scope.sequences', function() { 

     beforeEach(function() { 
      $scope = {}; 
      $controller = $controller('SequenceListCtrl', { $scope: $scope }); 
     }); 

     it('should create "sequences" model with 3 sequences', function() { 
      expect($scope.sequences.length).toBe(3); 
     }); 

    }); 

}); 

Когда я бегу karma start следующее сообщение об ошибке:

Error: ngMaterial requires HammerJS to be preloaded. 
    at MdCoreInitialize (/Users/rhysalgar/Dropbox/Projects/LabGeniusApp/bower_components/angular-material/angular-material.js:21:11) 
    at Object.invoke (/Users/rhysalgar/Dropbox/Projects/LabGeniusApp/bower_components/angular/angular.js:4138:17) 
    at /Users/rhysalgar/Dropbox/Projects/LabGeniusApp/bower_components/angular/angular.js:3960:71 
    at forEach (/Users/rhysalgar/Dropbox/Projects/LabGeniusApp/bower_components/angular/angular.js:322:20) 
    at Object.createInjector [as injector] (/Users/rhysalgar/Dropbox/Projects/LabGeniusApp/bower_components/angular/angular.js:3960:3) 
    at Object.workFn (/Users/rhysalgar/Dropbox/Projects/LabGeniusApp/bower_components/angular-mocks/angular-mocks.js:2337:52) 
TypeError: undefined is not a function 
    at Object.<anonymous> (/Users/rhysalgar/Dropbox/Projects/LabGeniusApp/media/development/test/controllers.test.js:20:25) 
TypeError: Cannot read property 'length' of undefined 
    at Object.<anonymous> (/Users/rhysalgar/Dropbox/Projects/LabGeniusApp/media/development/test/controllers.test.js:24:34) 

`` ` Все работает нормально, когда я удаляю зависимость ngMaterial в модуле приложения.

Моего karma.conf.js файл имеет следующий files массив:

files: [ 
    'test-main.js', 
    'bower_components/angular/angular.js', 
    'bower_components/angular-aria/angular-aria.js', 
    'bower_components/angular-animate/angular-animate.js', 
    'bower_components/hammerjs/hammer.js', 
    'bower_components/angular-material/angular-material.js', 
    'bower_components/angular-mocks/angular-mocks.js', 
    'media/development/js/*.js', 
    'media/development/test/*.js' 
], 

ответ

1

Вы должны включать в зависимости с правильным порядком:

<!-- Angular Material Dependencies --> 
<script src="//cdn.jsdelivr.net/hammerjs/2.0.4/hammer.min.js"></script> 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular.min.js"></script> 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular-animate.min.js"></script> 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular-aria.min.js"></script> 

<!-- Angular Material Javascript now available via Google CDN; version 0.6 used here --> 
<script src="//ajax.googleapis.com/ajax/libs/angular_material/0.6.1/angular-material.min.js"></script> 

Если вам нужна дополнительная информация, посмотри на Installing Build разделе.