Angular Jasmine Unit Testing: Error: [$injector:unpr] Unknown provider: $confirmProvider
Angular Jasmine Unit Testing: Error: [$injector:unpr] Unknown provider: $confirmProvider
你好,我正在用 Jasmine 编写我的第一个 angular 测试,但我一直收到错误,我是测试控制器,你确认不是 运行 测试,我在控制器中注入确认:错误:[$injector:unpr] 未知提供者:$confirmProvider 我的代码是:
我的规格
describe('Controller : diagramaController', function () {
var scope, rootScope, controller, $confirm, UserCtrl;
beforeEach(function () {
module('Mycontrollers');
});
beforeEach(inject(function ($rootScope, $controller, _$confirm_, $routeParams) {
// The injector unwraps the underscores (_) from around the parameter names when matching
scope = $rootScope.$new();
$confirm = _$confirm_;
UserCtrl = $controller('diagramaController', { $scope: scope, $confirm: confirm });
}));
it('Deberia agregar y sumar uno', function () {
//var $scope = {};
//var controller = $controller('actividadController', { $scope: $scope });
var contador = 0;
expect(contadoractual).toBe(contadorGenerado - 1);
});
});
我的控制器:
(function () {
angular.module('Mycontrollers', [])
.controller('diagramaController',['$scope', '$http', '$confirm', '$filter', '$timeout', '$routeParams', '$modal', '$rootScope',
function ($scope, $http, $confirm, $filter, $timeout, $routeParams,$modal, $rootScope)
{
$scope.contador = 1;
})();
我的应用在此处注入确认:
(function () {
var app = angular.module('myApp', [
'angucomplete-alt',
'ngDraggable',
'Mycontrollers',
'ngRoute',
'ui.bootstrap',
'Confirmar'
])
})();
};
确认js
angular.module("Confirmar", [])
.controller('ConfirmModalController', function ($scope, $modalInstance, data) {
$scope.data = angular.copy(data);
$scope.ok = function () {
$modalInstance.close();
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
})
.value('$confirmModalDefaults', {
template: '<div class="modal-header"><h3 class="modal-title">Confirmar</h3></div><div class="modal-body">{{data.text}}</div><div class="modal-footer"><button class="btn btn-primary" ng-click="ok()">Aceptar</button><button class="btn btn-primary" ng-click="cancel()">Cancelar</button></div>',
controller: 'ConfirmModalController'
})
.factory('$confirm', function ($modal, $confirmModalDefaults) {
return function (data, settings) {
settings = angular.extend($confirmModalDefaults, (settings || {}));
data = data || {};
if ('templateUrl' in settings && 'template' in settings) {
delete settings.template;
}
settings.resolve = { data: function () { return data; } };
return $modal.open(settings).result;
};
})
您需要将所有自定义模块与您要测试的模块一起初始化:
beforeEach(function () {
module('Mycontrollers');
module('Confirmar');
module('myApp');
});
编辑:
Here 是你的 plunkr 的简化版本。你那里有几个问题。首先,你尝试使用 $confirm,它不是标准的 angularjs 指令,但必须单独添加,这意味着你必须将它注入到你的模块中,而不仅仅是在你的控制器中。
这是如何完成的:
1) 将两个依赖项添加到您的源代码中:
<script src="ui-bootstrap-tpls-0.13.0.min.js"></script>
<script src="angular-confirm.js"></script>
您需要 ui-bootstrap 因为它是 angular-confirm 指令的依赖项。
2) 注入模块
angular.module('MyControllers', ['angular-confirm'])
.controller('diagramaController', ['$scope','$confirm',
函数($scope,$confirm){
你好,我正在用 Jasmine 编写我的第一个 angular 测试,但我一直收到错误,我是测试控制器,你确认不是 运行 测试,我在控制器中注入确认:错误:[$injector:unpr] 未知提供者:$confirmProvider 我的代码是:
我的规格
describe('Controller : diagramaController', function () {
var scope, rootScope, controller, $confirm, UserCtrl;
beforeEach(function () {
module('Mycontrollers');
});
beforeEach(inject(function ($rootScope, $controller, _$confirm_, $routeParams) {
// The injector unwraps the underscores (_) from around the parameter names when matching
scope = $rootScope.$new();
$confirm = _$confirm_;
UserCtrl = $controller('diagramaController', { $scope: scope, $confirm: confirm });
}));
it('Deberia agregar y sumar uno', function () {
//var $scope = {};
//var controller = $controller('actividadController', { $scope: $scope });
var contador = 0;
expect(contadoractual).toBe(contadorGenerado - 1);
});
});
我的控制器:
(function () {
angular.module('Mycontrollers', [])
.controller('diagramaController',['$scope', '$http', '$confirm', '$filter', '$timeout', '$routeParams', '$modal', '$rootScope',
function ($scope, $http, $confirm, $filter, $timeout, $routeParams,$modal, $rootScope)
{
$scope.contador = 1;
})();
我的应用在此处注入确认:
(function () {
var app = angular.module('myApp', [
'angucomplete-alt',
'ngDraggable',
'Mycontrollers',
'ngRoute',
'ui.bootstrap',
'Confirmar'
])
})();
};
确认js
angular.module("Confirmar", [])
.controller('ConfirmModalController', function ($scope, $modalInstance, data) {
$scope.data = angular.copy(data);
$scope.ok = function () {
$modalInstance.close();
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
})
.value('$confirmModalDefaults', {
template: '<div class="modal-header"><h3 class="modal-title">Confirmar</h3></div><div class="modal-body">{{data.text}}</div><div class="modal-footer"><button class="btn btn-primary" ng-click="ok()">Aceptar</button><button class="btn btn-primary" ng-click="cancel()">Cancelar</button></div>',
controller: 'ConfirmModalController'
})
.factory('$confirm', function ($modal, $confirmModalDefaults) {
return function (data, settings) {
settings = angular.extend($confirmModalDefaults, (settings || {}));
data = data || {};
if ('templateUrl' in settings && 'template' in settings) {
delete settings.template;
}
settings.resolve = { data: function () { return data; } };
return $modal.open(settings).result;
};
})
您需要将所有自定义模块与您要测试的模块一起初始化:
beforeEach(function () {
module('Mycontrollers');
module('Confirmar');
module('myApp');
});
编辑: Here 是你的 plunkr 的简化版本。你那里有几个问题。首先,你尝试使用 $confirm,它不是标准的 angularjs 指令,但必须单独添加,这意味着你必须将它注入到你的模块中,而不仅仅是在你的控制器中。
这是如何完成的:
1) 将两个依赖项添加到您的源代码中:
<script src="ui-bootstrap-tpls-0.13.0.min.js"></script>
<script src="angular-confirm.js"></script>
您需要 ui-bootstrap 因为它是 angular-confirm 指令的依赖项。
2) 注入模块 angular.module('MyControllers', ['angular-confirm']) .controller('diagramaController', ['$scope','$confirm', 函数($scope,$confirm){