Angular Mock Inject выдает ошибку без сообщения, используя Karma и Jasmine

Использование функции angular.mock.inject(...) при попытке модульного тестирования приложения Angular (Ionic) 1 вызывает следующую ошибку. Странно то, что нет конкретного сообщения об ошибке, что особенно затрудняет отладку. Что бы я ни пытался, мне всегда кажется, что выдает одну и ту же неописуемую ошибку без какого-либо сообщения.

PhantomJS 2.1.1 (Linux 0.0.0) LoginController should pass FAILED
    bower_components/angular/angular.js:4527:53
    forEach@bower_components/angular/angular.js:321:24
    loadModules@bower_components/angular/angular.js:4487:12
    createInjector@bower_components/angular/angular.js:4409:30
    WorkFn@bower_components/angular-mocks/angular-mocks.js:3160:60
    loaded@http://localhost:9876/context.js:151:17

Удаление вызова angular.mock.inject() позволяет пройти тест.

Вот тест, о котором идет речь:

describe('LoginController', function() {

  var scope;
  var controller;

  beforeEach(angular.mock.module('mCommonJobs'));
  beforeEach(angular.mock.inject(function($rootScope, $controller) {
      scope = $rootScope.$new();
      controller = $controller('LoginController', {
          $scope: scope
      });
  }));

  it('should pass', function() {
    expect(true).toEqual(true);
  });

});

Мои зависимости от беседки:

  "dependencies": {
    "angular-resource": "#1.5.0",
    "ionic": "driftyco/ionic-bower#1.3.2",
    "ngCordova": "^0.1.27-alpha",
    "ng-cordova-oauth": "^0.3.0",
    "ngstorage": "^0.3.11",
    "angular-mocks": "^1.5.2"
  },
  "resolutions": {
    "angular": "~1.5.x"
  }

И файлы, установленные в тестовом конфиге Karma:

files: [
  //Angular source
  'bower_components/angular/angular.js',
  'bower_components/angular-animate/angular-animate.js',
  'bower_components/angular-mocks/angular-mocks.js',
  'bower_components/angular-resource/angular-resource.js',
  'bower_components/angular-sanitize/angular-sanitize.js',
  'bower_components/angular-ui-router/release/angular-ui-router.js',
  'bower_components/ionic/js/ionic.bundle.js',
  'bower_components/ng-cordova-oauth/dist/ng-cordova-oauth.js',
  'bower_components/ngCordova/dist/ng-cordova.js',
  'bower_components/ngCordova/dist/ng-cordova-mocks.js',
  'bower_components/ngstorage/ngStorage.js',
  //App code
  'app/**/*.module.js',
  'app/**/*.js',
  'app/*.js',
  //Test files
  'test/**/*.test.js'
],

person LanceLafontaine    schedule 27.02.2017    source источник
comment
Ваша angular-mocks.js версия должна быть точно такой же, как ваша angular.js версия. Ваша конфигурация Bower resolutions заставляет Angular использовать версию 1.5.x   -  person Phil    schedule 27.02.2017
comment
@Phil Я изменил версию angular-mocks на ^1.5.2. Та же ошибка. Я обновлю вопрос.   -  person LanceLafontaine    schedule 27.02.2017
comment
Вы перезапустили bower install?   -  person Phil    schedule 27.02.2017
comment
Ага, я rm -rf bower_components и bower install.   -  person LanceLafontaine    schedule 27.02.2017
comment
Подбадривайте меня и используйте фиксированные версии для всех зависимостей, связанных с Angular, например "angular": "1.5.2", "angular-resource": "1.5.2", "angular-mocks": "1.5.2" и т. д.   -  person Phil    schedule 27.02.2017
comment
К вашему сведению, вы можете (и должны) сделать angular-mocks записью devDependencies   -  person Phil    schedule 27.02.2017
comment
Точно версия 1.5.2 для angular, angular-resource и angular-mocks по-прежнему приводит к той же ошибке (верите или нет). Спасибо за devDependencies предложение, я так и сделаю.   -  person LanceLafontaine    schedule 27.02.2017
comment
@Phil нашел решение, опубликовав ниже.   -  person LanceLafontaine    schedule 27.02.2017


Ответы (1)


Эта проблема была решена не включением всего ionic.bundle.js в конфиг files кармы, а включением конкретно его частей.

Я также явно заставил все версии зависимостей, связанных с angular, быть одной и той же версии (особая благодарность Phil в комментариях.) .


В итоге у моего bower.json было:

  "dependencies": {
    "angular-resource": "1.5.2",
    "ionic": "driftyco/ionic-bower#1.3.2",
    "ngCordova": "^0.1.27-alpha",
    "ng-cordova-oauth": "^0.3.0",
    "ngstorage": "^0.3.11",
    "angular-mocks": "1.5.2"
  },

и моя конфигурация кармы выглядела так:

files: [
  //Angular source
  'bower_components/angular/angular.js',
  'bower_components/angular-animate/angular-animate.js',
  'bower_components/angular-mocks/angular-mocks.js',
  'bower_components/angular-resource/angular-resource.js',
  'bower_components/angular-sanitize/angular-sanitize.js',
  'bower_components/angular-ui-router/release/angular-ui-router.js',
  'bower_components/ionic/js/ionic.js',
  'bower_components/ionic/js/ionic-angular.js',
  'bower_components/ng-cordova-oauth/dist/ng-cordova-oauth.js',
  'bower_components/ngCordova/dist/ng-cordova.js',
  'bower_components/ngCordova/dist/ng-cordova-mocks.js',
  'bower_components/ngstorage/ngStorage.js',
  //App code
  'app/**/*.module.js',
  'app/**/*.js',
  'app/*.js',
  //Test files
  'test/**/*.test.js'
],
person LanceLafontaine    schedule 27.02.2017