Как внедрить $routeProvider в спецификацию Angular

#angularjs #rspec

#angularjs #rspec

Вопрос:

При передаче этой функции, которая включает $routeProvider в определение модуля, как вы правильно имитируете / внедряете ее в спецификацию?

module.js

 angular.module('myModule', [
  // Without the function($routeProvider) below the test passes. With it, it fails.
  function($routeProvider) {
    $routeProvider.when('/some/url/:id', {templateUrl: 'template.html', reloadOnSearch: false});
  }
])
  

myModuleCtrl.js

 angular.module('myModule')
  .controller('myModuleCtrl', [
    '$scope',
    function ($scope) {
      $scope.testMethod = function () {
        alert('Test Me!');
      }
    }
  ]);
  

myModuleCtrl.spec.js

 describe('myModuleCtrl', function () {
  var controller;
  var $scope;

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

  describe('when doing stuff', function() {
    it('does other stuff', function() {
      $scope.testMethod();
    });
  });
});
  

Как прокомментировано в module.js без строки $routeProvider спецификация проходит. При этом происходит сбой со следующим сообщением:

 Error: [$injector:modulerr] Failed to instantiate module myModule due to:
Error: [$injector:modulerr] Failed to instantiate module function ($routeProvider) due to:
Error: [$injector:unpr] Unknown provider: $routeProvider
  

Что нужно сделать в файле спецификации, чтобы загрузить этот модуль (включая $routeProvider)?

Комментарии:

1. Angular router — это отдельный модуль. Вы включили это в свой исходный код? code.angularjs.org/1.5.8/docs/api/ngRoute

2. $ routeProvider должен быть в блоке config(). Синтаксис в module.js определение вашего модуля неверно.

3. @PeterJ. Харт Помимо спецификации, я унаследовал этот код, и он работает как есть. Насколько я понимаю, синтаксис является сокращением для эквивалентного блока config().

Ответ №1:

В ваш модуль должен быть внедрен ngRoute зависимости

 angular.module('myModule', ['ngRoute'])
  

То же самое должно быть и для теста,

 beforeEach(angular.mock.module('myModule',['ngRoute']));
  

Комментарии:

1. За исключением того, что это должно быть beforeEach(angular.mock.module('myModule','ngRoute'));