Angularjs 角度单元测试中的未知提供者

Angularjs 角度单元测试中的未知提供者,angularjs,Angularjs,我有一个控制器: angular.module("controllers").controller("AddController", function($rootScope, $scope, $location, $timeout, $routeParams, Todos, MessageQueue) { // ... code }); 这个测试: describe("AddController", function() { var ctrl; var scope;

我有一个控制器:

angular.module("controllers").controller("AddController", function($rootScope, $scope, $location, $timeout, $routeParams, Todos, MessageQueue) {
   // ... code
});
这个测试:

describe("AddController", function() {

   var ctrl;
   var scope;

   beforeEach(module('controllers'));

   beforeEach(inject(function($rootScope, $controller) {
      scope = $rootScope.$new();
      ctrl = $controller('AddController', {
         $scope: scope
      });
   }));

   it("should be available", function() {
      expect(ctrl).not.toBe(undefined);
   });

});
因果报应说:

Error: [$injector:unpr] Unknown provider: $routeParamsProvider <- $routeParams
    http://errors.angularjs.org/1.2.27-build.533+sha.c8c2386/$injector/unpr?p0=%24routeParamsProvider%20%3C-%20%24routeParams

我有点困惑。有人吗?

您可以自己将“$routeParams”对象传递给
$controller
调用,它将如下所示:

beforeEach(inject(function($rootScope, $controller) {
      scope = $rootScope.$new();
      ctrl = $controller('AddController', {
         $scope: scope,
         $routeParams: {id: '...'}
      });
   }));

您的控制器在测试之外运行良好吗?您应该在控制器中注入$routeParams。@我用整个karma.configIt编辑了这个问题!但它为什么不自己做呢?在单元测试时,Karma不应该解决所有的依赖关系吗?它不是Karma。Angular本身不提供任何$routeParams的模拟,因为它可能没有多大意义。是的,对不起。我是说棱角分明。那么规则是什么呢?对于控制器签名,我可以依赖什么?将提供什么?
beforeEach(inject(function($rootScope, $controller) {
      scope = $rootScope.$new();
      ctrl = $controller('AddController', {
         $scope: scope,
         $routeParams: {id: '...'}
      });
   }));