gpt4 book ai didi

angularjs - 测试元素指令 - 在测试期间无法访问隔离范围方法

转载 作者:行者123 更新时间:2023-12-02 19:05:17 24 4
gpt4 key购买 nike

我有以下指令。

directivesModule.directive('wikis', function() {
var urlRegex = new RegExp('^(https?)://.+$');

return {
restrict: 'E',
templateUrl: 'templates/wiki-list.html',
scope: {
wikis: '='
},
link: function(scope, element, attrs) {
scope.newWikiURL = '';

scope.$watch('wikis', function() {
if (scope.wikis == undefined || scope.wikis.length === 0) {
scope.class = 'hide';
} else {
scope.class = 'show';
}
}, false);

scope.addWiki = function() {
if (scope.wikis == undefined) {
scope.wikis = [];
}

var nw = scope.newWikiURL;
if (nw != undefined && nw.trim() != '' && urlRegex.exec(nw)) {
scope.wikis.push(nw);
scope.newWikiURL = '';
}
}

}
};

});

当我测试它时:

describe('Wikis Directive Test Suite', function() {
var scope, elem, directive, linkFn, html;

beforeEach(function() {
html = '<wikis wikis=''></wikis>';

inject(function($compile, $rootScope) {
scope = $rootScope.$new();
scope.wikis = [];

elem = angular.element(html);

$compile(elem)(scope);

scope.$digest();
});

});

it('add Wiki should add a valid wiki URL to artist', function() {
var url = 'http://www.foo.com';
scope.newWikiURL = url;
scope.addWiki();

expect(scope.wikis.length).toBe(1);
expect(scope.wikis[0]).toBe(url);
expect(scope.newWikiURL).toBe('');
});
});

我收到一条错误消息,指出 Object 没有 addWiki 方法。我尝试调试一下,测试过程中并没有调用link函数。我怀疑这就是为什么 addWiki 方法不属于范围的原因。有人知道我为什么会收到此错误吗?

顺便问一下,在指令的链接函数中添加一些逻辑是否是一种正常的做法,因为它本身就是 Controller ?因为查看代码我知道这就是我实际上正在做的原因。

最佳答案

根据 Angular 1.2.0 文档,获取隔离范围的方法是通过方法isolateScope

  • scope() - 检索当前元素或其父元素的范围。

  • isolateScope() - 如果直接附加到当前元素,则检索隔离范围。此 getter 只能用在包含启动新隔离范围的指令的元素上。在此元素上调用scope()始终返回原始的非隔离范围。

Angular doc - section jQuery/jqLite Extras

BREAKING CHANGE: jqLite#scope()

关于angularjs - 测试元素指令 - 在测试期间无法访问隔离范围方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18713909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com