从呼叫噶和Jasmine测试控制器功能 [英] Call a controller function from Karma and Jasmine testing
本文介绍了从呼叫噶和Jasmine测试控制器功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我的角度控制器: -
angular.module(编辑控制器,[])。
控制器('NavCtrl',函数($范围,$位置,BasketNavigationService){$ scope.test =功能(){
$ scope.testVar = BasketNavigationService.showBasketList();
};
});
测试类
描述('NavCtrl',函数(){
VAR范围,$位置,createController; beforeEach(注(函数($ rootScope,$控制器_ $位置指定:){
$位置= _ $位置指定:;
范围= $ rootScope $新的()。 createController =功能(){
返回$控制器('NavCtrl',{
'$范围:范围
});
};
})); 它('调用测试时,应该创建$ scope.testVar',
功能(){
期待(scope.testVar).toBeUndefined();
scope.test();
期待(scope.testVar).toBeDefined();
});
});
得到一个错误,当我运行测试用例: - scope.test()是不确定的。
如果我删除的 BasketNavigationService 从控制器功能,那么它是工作..
请帮我解决了因果报应的测试用例。
解决方案
这里的工作演示,希望它帮助。
问题是与注射的依赖关系。
\r
\r\r
\r // --- code -------- ------------------\r
(函数(角){\r
//创建模块\r
VAR对myApp = angular.module('对myApp',[]);\r
\r
//控制器,计数改变其名成员\r
myApp.controller('MyCtrl',['$范围,BasketNavigationService',\r
功能($范围,BasketNavigationService){\r
\r
$ scope.test =功能(){\r
$ scope.testVar = BasketNavigationService.showBasketList();;\r
};\r
}\r
]);\r
\r
\r
})(角度);\r
\r
\r
\r
// --- SPECS -------------------------\r
\r
描述(对myApp',函数(){\r
VAR范围,\r
控制器;\r
beforeEach(函数(){\r
模块('对myApp');\r
});\r
\r
描述(MyCtrl',函数(){\r
beforeEach(注(函数($ rootScope,$控制器){\r
范围= $ rootScope $新的()。\r
控制器= $控制器('MyCtrl',{\r
'$范围:范围,\r
BasketNavigationService:{\r
showBasketList:功能(){\r
返回null;\r
}\r
}\r
});\r
}));\r
它('调用测试时,应该创建$ scope.testVar',\r
功能(){\r
期待(scope.testVar).toBeUndefined();\r
scope.test();\r
//范围$消化();\r
期待(scope.testVar).toBeDefined();\r
});\r
});\r
\r
\r
});\r
\r
// ---亚军-------------------------\r
(函数(){\r
变种jasmineEnv = jasmine.getEnv();\r
jasmineEnv.updateInterval = 1000;\r
\r
VAR htmlReporter =新jasmine.HtmlReporter();\r
\r
jasmineEnv.addReporter(htmlReporter);\r
\r
jasmineEnv.specFilter =功能(SPEC){\r
返回htmlReporter.specFilter(规范);\r
};\r
\r
VAR currentWindowOnload =的window.onload;\r
\r
在window.onload =函数(){\r
如果(currentWindowOnload){\r
currentWindowOnload();\r
}\r
execJasmine();\r
};\r
\r
功能execJasmine(){\r
jasmineEnv.execute();\r
}\r
\r
})();
\r
&LT;脚本SRC =http://jasmine.github.io/1.3 /lib/jasmine.js\"></script>\r
&所述; SCRIPT SRC =http://jasmine.github.io/1.3/lib/jasmine-html.js&GT;&下; /脚本&GT;\r
&LT;脚本SRC =HTTPS://$c$c.angularjs.org/1.2.9/angular.js&GT;&LT; / SCRIPT&GT;\r
&LT;脚本SRC =HTTPS://$c$c.angularjs.org/1.2.9/angular-mocks.js&GT;&LT; / SCRIPT&GT;\r
\r
&LT;链接HREF =http://jasmine.github.io/1.3/lib/jasmine.css的rel =stylesheet属性/&GT;
\r
提琴: http://jsfiddle.net/invincibleJai/pf1deoom/1/
This is my angular controller :-
angular.module('authoring-controllers', []).
controller('NavCtrl', function($scope, $location, BasketNavigationService) {
$scope.test= function() {
$scope.testVar = BasketNavigationService.showBasketList();
};
});
TEST class
describe('NavCtrl', function() {
var scope, $location, createController;
beforeEach(inject(function ($rootScope, $controller, _$location_) {
$location = _$location_;
scope = $rootScope.$new();
createController = function() {
return $controller('NavCtrl', {
'$scope': scope
});
};
}));
it('should create $scope.testVar when calling test',
function() {
expect(scope.testVar).toBeUndefined();
scope.test();
expect(scope.testVar).toBeDefined();
});
});
Getting an error when i run that test case :- scope.test() is undefined..
If i removed BasketNavigationService functionality from controller then it is working..
Please help me to solve that karma test case.
解决方案
here is the working demo , hope it helps. problem was with injecting the dependencies.
//--- CODE --------------------------
(function(angular) {
// Create module
var myApp = angular.module('myApp', []);
// Controller which counts changes to its "name" member
myApp.controller('MyCtrl', ['$scope', 'BasketNavigationService',
function($scope, BasketNavigationService) {
$scope.test = function() {
$scope.testVar = BasketNavigationService.showBasketList();;
};
}
]);
})(angular);
// ---SPECS-------------------------
describe('myApp', function() {
var scope,
controller;
beforeEach(function() {
module('myApp');
});
describe('MyCtrl', function() {
beforeEach(inject(function($rootScope, $controller) {
scope = $rootScope.$new();
controller = $controller('MyCtrl', {
'$scope': scope,
'BasketNavigationService': {
showBasketList: function() {
return null;
}
}
});
}));
it('should create $scope.testVar when calling test',
function() {
expect(scope.testVar).toBeUndefined();
scope.test();
// scope.$digest();
expect(scope.testVar).toBeDefined();
});
});
});
// --- Runner -------------------------
(function() {
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
var htmlReporter = new jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.specFilter = function(spec) {
return htmlReporter.specFilter(spec);
};
var currentWindowOnload = window.onload;
window.onload = function() {
if (currentWindowOnload) {
currentWindowOnload();
}
execJasmine();
};
function execJasmine() {
jasmineEnv.execute();
}
})();
<script src="http://jasmine.github.io/1.3/lib/jasmine.js"></script>
<script src="http://jasmine.github.io/1.3/lib/jasmine-html.js"></script>
<script src="https://code.angularjs.org/1.2.9/angular.js"></script>
<script src="https://code.angularjs.org/1.2.9/angular-mocks.js"></script>
<link href="http://jasmine.github.io/1.3/lib/jasmine.css" rel="stylesheet" />
fiddle : http://jsfiddle.net/invincibleJai/pf1deoom/1/
这篇关于从呼叫噶和Jasmine测试控制器功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文