在Jasmine测试中从未调用AngularJS指令的link函数

时间:2016-02-17 09:51:00

标签: javascript angularjs angularjs-directive jasmine karma-jasmine

我不明白为什么我的指令的链接功能永远不会在Jasmine测试中被调用。我做了一个简单的例子。

这是我的指令(TestDirective.js):



'use strict';

angular.module('comp-one').directive('test',function(){

    return{
        restrict:'E',
        templateUrl:'components/comp-one/html/TestTemplate.html',
        scope:true,
        link:function(scope){
            scope.test='xxx';
        }
    };
});




这是测试用例:



'use strict';

describe('testDirective',function(){
    var $compile, $rootScope, element;

    beforeEach(module('comp-one'));
    beforeEach(module('templates'));

    beforeEach(inject(function(_$rootScope_,_$compile_){
        $compile = _$compile_;
        $rootScope = _$rootScope_;
    }));

    it('xxx', function(){
        var html = '<test></test>';
        element = $compile(html)($rootScope);
        $rootScope.$digest();

        expect( $rootScope.test ).toBe('xxx');
    });
});
&#13;
&#13;
&#13;

测试失败,因为链接函数永远不会被调用,因此xxx变量未定义。我期望链接功能被&#34; $ compile(html)($ rootScope);&#34;声明。 当我在链接函数中设置断点并在浏览器中运行应用程序(而不是测试)时,会调用链接函数。

我正在使用Karma运行测试,我也可以在控制台输出中找到该文件:

Processing "D:/JWS/test/workspace/bla/app/components/comp-one/scripts/TestDirective.js".

修改

好, 我发现当我将范围设置为false时,测试运行成功。但有没有办法用隔离的范围测试链接功能?

1 个答案:

答案 0 :(得分:2)

调用链接功能。您将在元素的范围内找到值,而不是$rootScope

在期望部分使用element.isolateScope().test代替$rootScope.test