我有一个相当复杂的 Angular 指令,称为hy-plugin-window
,我在一个ng-repeat
块中使用它(完整的指令代码在这里):
<div ng-repeat="pluginD in pluginsDisplayed">
<div hy-plugin-window content="pluginD" remove="remove"></div>
</div>
该指令使用一个隔离范围,它与父级成员双向链接content
:
return {
restrict: 'A',
replace: true,
link: linker,
scope: {
content:'=',
}
};
这意味着,当它被创建时,列表中的每个指令都可以访问其唯一的内容(它是 object 的单个成员pluginsDisplayed
)并执行以下操作:
scope.statusMessage = 'Loading ' + scope.content.name + '...';
一切正常,除了我不知道如何用 Karma 测试它。通过这样一个相当常见的测试,我希望手动设置指令内的范围:
'use strict';
describe('Directive: hyPluginWindow', function () {
beforeEach(module('hyacinthHostApp'));
var element, $compile, scope;
beforeEach(inject(function(_$compile_, $rootScope) {
$compile = _$compile_;
scope = $rootScope.$new();
}));
it('should do something', inject(function () {
scope.content = {
name: "testElement",
id: "testElement000",
uiType: "canvas"
};
element = angular.element('<div hy-plugin-window></div>');
element = $compile(element)(scope);
//expect(...);
}));
});
但它悲惨地失败了:
TypeError: Cannot read property 'name' of undefined
我的指令第一次尝试访问它的scope.content.name
.
考虑到我是一个测试完整的新手,我错过了什么?