我开始学习如何使用茉莉花进行unitTesting。我在互联网上阅读了很多内容,但我无法解决我的问题。
我有一个有控制器的指令。当我点击一个元素时,该控制器正在使用服务$ uibModal来打开一个模态。我正试图从我的测试中注入该服务,但我不能。我读了很多帖子说我必须传递一个实例。我想这样做,但我做不到。如有任何帮助,将不胜感激。
.controller('myController', ['$scope', '$uibModal', function($scope, $uibModal){
var self = this;
//OTHER CODE
self.openMyModal = function(dataInput) {
var modalInstance = $uibModal.open({
animation: true,
bindToController: true,
templateUrl: 'app/myComponent/modals/component-modal.html',
controllerAs: 'componentModalCtrl',
controller: 'componentModalController',
windowClass: 'semi-modal semi-modal--large',
scope: $scope
})
}
//OTHER CODE
}
这是我试图模仿这个模态的测试。
beforeEach(function(){
angular.mock.module('templates');
angular.mock.module('app.components.myComponent');
angular.mock.inject(function($compile, $rootScope, $templateCache, $controller){
scope = $rootScope;
modalInstance = { close: function(){}, dismiss: function(){}, open: function(){}
};
//Initializing element and doing compile and digest
controller = $controller('myController', {$scope: scope, $uibModal: modalInstance});
})
我收到了错误
未知提供者:$ uibModalProvider< - $ uibModal。
我可以用其他方式注入此服务吗?我做错了什么?
P.S:我读过这个Testing AngularUI Bootstrap modal instance controller
Angular ui bootstrap $uibModalInstance breaks down unit tests
答案 0 :(得分:1)
试试这个:
beforeEach(module(function ($provide) {
$provide.service("$uibModal", function () {
// mock methods here
});
}));
答案 1 :(得分:0)
最后我解决了。这是一个愚蠢的错误。我导入了一个我在测试中缺少的附加模块。之后,我可以模拟我的服务并使用它,没有任何问题。
angular.mock.inject(function($compile, $rootScope, $templateCache, $controller, $uibModal){
scope = $rootScope;
uibModal = $uibModal;
element = angular.element('<directive-tree input-tree=inputTree subsystem=subsystem></directive-tree>');
$compile(element)(scope);
scope.$digest();
controller = $controller('directiveTreeController', {$scope: scope, $uibModal: uibModal});
});