这段代码在运行我的测试用例时出错。
beforeEach(module(function($scope) {
// do something interesting with the service
//console.log($controller);
}));
控制台出现错误。
debug.js:21 Uncaught Error: [$injector:modulerr] Failed to instantiate
module function ($scope) due to:
Error: [$injector:unpr] Unknown provider: $scope
任何人都可以解释为什么它无法找到$ scope。如果我将其更改为$ timeout或$ controller,它也无法正常工作。
更新了代码 如果我将代码更改为
然后它可以工作
module(function($controllerProvider) {
// we could also access the $controllerProvider.allowGlobals() function,
// which allows us to register a controller on the window object.
$controllerProvider.register('ProductsController', function() {
// logic of the controller...
});
});
答案 0 :(得分:1)
您正在混合两个不同的功能module
和inject
。
module
配置jasmine环境以使用您指定的angular模块。这可能是app
。如果您不打电话,注射器将无法找到您的服务,控制器,指令等。在module
功能中,您可以注入providers,而不是服务,工厂,您可以使用提供程序来配置以后服务的行为方式。
inject
接受你提供的功能,并且#34;注入"在调用之前,通过名称提供服务,常量,工厂等。您可以使用它来自行调整服务等。
以下是如何拆分代码中的调用的示例。我还将$scope
更改为使用$rootScope
并创建范围。
beforeEach(function() {
module("app"); //or if your module is name something different, use that name instead
inject(function($controller, $rootScope) {
var $scope = $rootScope.$new();
var myCtrl = $controller("myCtrl", { $scope: $scope });
}));
});