$ controller没有在jasmine中实例化

时间:2016-08-17 10:09:40

标签: angularjs jasmine

这段代码在运行我的测试用例时出错。

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

1 个答案:

答案 0 :(得分:1)

您正在混合两个不同的功能moduleinject

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 });
    }));
});