测试AngularJS指令范围未定义

时间:2016-05-19 12:04:31

标签: angularjs angularjs-directive karma-jasmine

我试图测试我的一个指令,但我无法解决为什么我的范围对象未定义。

define(["require", "exports", 'angular', 'directives', "angularMocks", "chartApp"], function (require, exports, angular, Directives) {
    "use strict";
    describe('board controls', function () {
        describe('task filter', function () {
            var $compile;
            var $rootScope;
            var scope;
            var element;
            beforeEach(angular.mock.module('chartApp'));
            beforeEach(angular.mock.module('partials/directives/board-controls.html'));
            beforeEach(inject(function (_$compile_, _$rootScope_) {
                $compile = _$compile_;
                $rootScope = _$rootScope_;
                scope = $rootScope.$new();
                expect(scope).toBeDefined();
                element = $compile('<board-controls></board-controls>')(scope);
                scope.$digest();
            }));
            it('displays modal', function () {
                scope.showChildFilters();
            });
        });
    });
});

it('displays modal')...部分Karma输出:

TypeError: undefined is not an object (evaluating 'scope.showChildFilters')

但在beforeEach(...)部分似乎有效。我无法理解为什么这不起作用。

1 个答案:

答案 0 :(得分:0)

您需要更改为

    it('displays modal', function () {
       //scope.showChildFilters();

     var isolateScope = element.isolateScope(); //I prefer to name isolateScope
     isolateScope.$apply() //cause scope to digest and watch and all that

     isolateScope.showChildFilters();
    });

这也是对你的问题非常详细的回答。 Testing element directive - can't access isolated scope methods during tests