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