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