AngularJS中的单元测试出错 - 具有许多依赖性的控制器

时间:2015-02-07 16:16:35

标签: angularjs unit-testing

我在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

提前致谢

1 个答案:

答案 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的更多信息。