如何在不实例化的情况下获取自定义元素定义?

时间:2014-11-17 19:32:53

标签: unit-testing reference web-component stub custom-element

在查看custom element spec之后,如果没有首先实例化它(这可能会有问题),我如何获得对自定义元素定义的引用并不是很明显。有没有办法直接引用自定义元素的原型?

更具体地说,如果我有:

var proto = Object.create(HTMLElement.prototype);
proto.createdCallback = function() { // some heavy operation };
document.registerElement('x-foo', {prototype: proto});

稍后,我希望用以下内容来引用原型:

// wish
var XFoo = document.getElementDefinition('x-foo');

但我唯一想到的方法是:

// reality
var XFoo = document.createElement('x-foo').__proto__;

当尝试针对繁重的组件编写测试时,这尤其成问题 - 因为在实际调用原始方法之前,没有办法将重度行为(使用类似XFoo.createdCallback = // stub;的方法)排除在外。

2 个答案:

答案 0 :(得分:0)

  

没有办法剔除沉重的行为

使用函数引用而不是匿名函数:

proto.createdCallback = model.foo;

定义它:

var model = {};
model.foo = function(){/*some heavy operation*/};

然后通过重新定义来存根:

var XModel = {};
XModel.foo = function(){/*stub*/};

并在测试中引用它:

XFoo.createdCallback = XModel.foo;

<强>参考

答案 1 :(得分:0)

如果您引用了自定义元素的构造函数,则可以使用它来访问原型。

var XFoo = document.registerElement('x-foo', {prototype: proto});
XFoo.prototype // this will give u access to the prototype object.