簡體   English   中英

為什么我不能在 jasmine 測試中訪問指令的范圍?

[英]Why can't i access directive's scope in jasmine test?

這是我的指令:

angular.module('app')
    .directive('statusFilter',statusFilter);

function statusFilter() {
    return {
        restrict: 'E',
        replace: true,
        templateUrl: 'app/directives/status-filter.html',
        scope: {
            flags: '='
        },
        controller: function($scope, $element, $timeout, $document) {

            function isChildElement(el) {
                return $.contains($element[0], el);
            }

            function close(event) {
                if (!isChildElement(event.target)) {
                    $scope.$apply(function() {
                        $scope.isOpen = false;
                    });
                    $document.off('mouseup', close);
                }
            }

            function updateFlags(value) {
                for (var prop in $scope.flagsClone) {
                    $scope.flagsClone[prop] = value;
                }
            }

            function pullFlags() {
                $scope.flagsClone = $.extend(true, {}, $scope.flags);
            }

            function pushFlags() {
                for (var prop in $scope.flagsClone) {
                    $scope.flags[prop] = $scope.flagsClone[prop];
                }
            }

            $scope.isOpen = false;
            $scope.flagsClone = {};

            pullFlags();

            $scope.apply = function() {
                pushFlags();
                $scope.isOpen = false;
            };

            $scope.selectAll = function() {
                updateFlags(true);
            };

            $scope.selectNone = function() {
                updateFlags(false);
            };

            $scope.open = function() {
                if (!$scope.isOpen) {
                    pullFlags();
                    $scope.isOpen = true;

                    $timeout(function() {
                        $document.on('mouseup', close);
                    });
                }
            };
        }

    };

}

這是我為它編寫的一個簡單測試:

describe('status-filter directive', function() {
    beforeEach(module('app'));

    var template = '<status-filter flags="filters"></status-filter>';
    var scope, element;


    beforeEach(inject(function($rootScope, $compile) {
        scope = $rootScope.$new();
        var ngElement = angular.element(template);
        element = $compile(ngElement)(scope);
        scope.$digest();
    }));

    it('Should open when isOpen is true', function() {
        scope.open();
        scope.$digest();

        expect(scope.isOpen).toBe(true);


    });
});

無論我如何嘗試,我都無法訪問指令的范圍。 就像上面的例子一樣,.isolateScope(), element.scope()。 無論我嘗試什么,我得到open() is undefined錯誤。 我的代碼有什么問題?

我無法訪問范圍的原因是我沒有創建過濾器變量。 所以這將起作用:

describe('status-filter directive', function() {
    beforeEach(module('app'));

    var template = '<status-filter flags="filters"></status-filter>';
    var scope, element;


    beforeEach(inject(function($rootScope, $compile) {
        scope = $rootScope.$new();
        scope.filters = {
             filter1:true;
        }

        var ngElement = angular.element(template);
        element = $compile(ngElement)(scope);
        scope.$digest();
    }));

    it('Should open when isOpen is true', function() {
        scope.open();
        scope.$digest();

        expect(scope.isOpen).toBe(true);


    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM