Javascript 从Karma和Jasmine测试调用控制器函数
这是我的角度控制器:-Javascript 从Karma和Jasmine测试调用控制器函数,javascript,angularjs,unit-testing,karma-jasmine,Javascript,Angularjs,Unit Testing,Karma Jasmine,这是我的角度控制器:- angular.module('authoring-controllers', []). controller('NavCtrl', function($scope, $location, BasketNavigationService) { $scope.test= function() { $scope.testVar = BasketNavigationService.showBasketList();
angular.module('authoring-controllers', []).
controller('NavCtrl', function($scope, $location, BasketNavigationService) {
$scope.test= function() {
$scope.testVar = BasketNavigationService.showBasketList();
};
});
测试类
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();
});
});
运行该测试用例时出错:-scope.test()未定义
如果我从控制器中删除了BasketNavigationService功能,则它正在工作
请帮助我解决karma测试用例。请将您的
createController
设置更改为:
createController = function() {
return $controller('NavCtrl', {
'$scope': scope,
'$location':$location,
'BasketNavigationService':{showBasketList: function(){return 'test'} }
});
};
您没有注入所有依赖项。
我已经注入了虚拟的
BasketNavigationService
,您可以注入真实的。您是否尝试运行createController()代码>?我不认为你的NavCtrl
控制器会被嘲笑。这是正在运行的演示,希望能有所帮助。
问题在于注入依赖项。
/--code--------------------------
(功能(角度){
//创建模块
var myApp=angular.module('myApp',[]);
//对其“名称”成员的更改进行计数的控制器
myApp.controller('MyCtrl'、['$scope'、'BasketNavigationService',
功能($scope,BasketNavigationService){
$scope.test=函数(){
$scope.testVar=BasketNavigationService.showBasketList();;
};
}
]);
})(角度);
//---规格-------------------------
描述('myApp',函数(){
var范围,
控制器;
beforeach(函数(){
模块(“myApp”);
});
描述('MyCtrl',函数(){
beforeach(注入(函数($rootScope,$controller){
scope=$rootScope.$new();
控制器=$controller('MyCtrl'{
“$scope”:范围,
“BasketNavigationService”:{
showBasketList:函数(){
返回null;
}
}
});
}));
它('调用测试时应创建$scope.testVar',
函数(){
expect(scope.testVar).toBeUndefined();
scope.test();
//范围。$digest();
expect(scope.testVar).tobededefined();
});
});
});
//---跑步者-------------------------
(功能(){
var jasmineEnv=jasmine.getEnv();
jasmineEnv.updateInterval=1000;
var htmlReporter=new jasmine.htmlReporter();
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.specFilter=函数(spec){
返回htmlReporter.specFilter(spec);
};
var currentWindowOnload=window.onload;
window.onload=函数(){
如果(currentWindowOnload){
currentWindowOnload();
}
茉莉花();
};
函数execJasmine(){
jasminev.execute();
}
})();代码>
您在expect(scope.testVar).toBedefined()中有一个输入错误代码>应该是expect(scope.testVar).tobededefine()代码>谢谢,为什么要写返回“test”我必须在这里写什么?我只是返回一个伪值。