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: '...'}
});
}));