我在AngularJS中遇到单元测试问题。我从github角度种子应用程序中取出并编写了一些模块。而现在,当我尝试测试它时,我有错误。 问题仅出在单元测试中 - 浏览器应用程序正常运行。
我觉得应该很容易解决,但我无法找到我犯错的地方。
我的控制器:
'use strict';
angular.module('myApp.student', ['ngRoute'])
.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/student', {
templateUrl: 'student.html',
controller: 'StudentCtrl'
});
}])
.controller('StudentCtrl', ['$scope', '$http', '$modal', '$log', function($scope, $http, $modal, $log) { ... }]);
我的单元测试dokumenty_test.js:
describe('myApp.student', function() {
beforeEach(module('myApp.student'));
describe('StudentCtrl controller', function(){
it('should ....', inject(function($controller) {
//spec body
var view1Ctrl = $controller(StudentCtrl');
expect(view1Ctrl).toBeDefined();
}));
});
});
来自控制台的错误: 错误:[$ injector:unpr]未知提供者:$ scopeProvider< - $ scope http://errors.angularjs.org/1.2.28/ $注射器/ unpr?P0 =%24scopeProvider%20%3 C-%20%24scope
提前致谢
答案 0 :(得分:2)
创建控制器时需要手动设置控制器的依赖关系:
it('should ....', inject(function($controller, $rootScope, $http, $modal, $log) {
var view1Ctrl = $controller('StudentCtrl', {
'$scope': $rootScope.$new(),
'$http': $http,
'$modal': $modal,
'$log': $log
});
expect(view1Ctrl).toBeDefined();
}));
演示: http://plnkr.co/edit/IciIZvjRu66P3NhDc6ud
请注意,我已将模块ui.bootstrap
添加为应用程序,因为控制器正在使用$modal
。
您可以阅读有关单元测试控制器here的更多信息。