[英]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.