繁体   English   中英

在茉莉花中将$ scope传递给$ scope以测试angularjs控制器

[英]passing $scope to $scope in jasmine to test angularjs controller

下面是一个有效的茉莉花测试用例,但我对此行感到困惑

var controller = $controller('CalculatorController', { $scope: $scope });

^为什么我们需要声明第二个参数,并传入$ scope:$ scope。 这不是默认值吗? 因为在angularjs中,您的控制器肯定具有作用域。

describe('calculator', function () {

    beforeEach(angular.mock.module('calculatorApp'));

    var $controller;

    beforeEach(angular.mock.inject(function(_$controller_){
      $controller = _$controller_;
    }));

    describe('sum', function () {
        it('1 + 1 should equal 2', function () {
            var $scope = {};
            var controller = $controller('CalculatorController', { $scope: $scope });
            $scope.x = 1;
            $scope.y = 2;
            $scope.sum();
            expect($scope.z).toBe(3);
        }); 
    });

});

控制器依赖性

当您按以下方式声明控制器时,控制器不仅具有$scope

myApp.controller("appController", function ($scope){
    // controller code here
});

您实际上在做什么是声明对$scope的依赖。 也就是说,必须给控制器$scope才能执行其工作。 上面的另一种语法是:

myApp.controller("appController", ["$scope", function ($scope){
    // controller code here
}]);

该语法意味着将名称为“ $ scope”的角度服务注入到变量$scope ,因此变量$scope成为控制器的作用域。

依赖测试控制器

在测试控制器时,测试基于控制器范围。 使用$controller服务,您可以创建控制器并传入所有依赖项。

您突出显示的代码的{ $scope: $scope }部分是您指定控制器依赖项的地方。 你说的话有“使用$scope ,我在我的测试作为控制器的在这里创造$scope ”。 您可以将第二个$scope称为任何东西,它恰好在您的测试中与控制器中在本地被称为同一东西。 这也很好:

var myScope = {};
var controller = $controller('CalculatorController', { $scope: myScope });

然后,您对控制器运行操作,其想法是使这些操作更改示波器上保存的值。 然后,您可以对示波器上保持的状态运行期望。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM