簡體   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