我刚刚开始使用聚合物。我正在尝试对具有依赖项的自定义元素进行单元测试,并且我想伪造/模拟这些元素。
我找到了 Scott Miles 关于如何模拟 core-ajax 实现的建议。我认为我可以轻松地遵循该模式,但这仅在我的元素不导入即将被模拟的元素(在本例中为 core-ajax)的情况下才有效。
如果它确实导入它,那么当测试尝试运行时我得到
'未捕获的NotSupportedError:无法在'文档'上执行'registerElement':类型'core-ajax'的注册失败。具有该名称的类型已被注册。
如果我可以做类似 document.unregister the core-ajax 元素并在我的测试中再次导入它的事情,我会成为一个更快乐的开发者!
Polymer 很棒,但如果我无法对它进行单元测试,那么它就会带来重大风险(至少在构建需要维护/更改的应用程序时)
你们如何解决这个问题?我一直在深入研究 Polymer 和 PolymerLab elements repo,其中大多数都缺乏测试。到目前为止,我还没有找到太多关于如何做到这一点的参考。
谢谢您的帮助!
Santiago
斯科茨的建议是:
创建您自己的 core-ajax 元素,而不是导入 core-ajax/core-ajax.html。
<polymer-element name="core-ajax" attributes="response">
<script>
Polymer('core-ajax', {
attached: function() {
this.response = ['a', 'b', 'c'];
}
});
</script>
</polymer-element>
显然,这只是一个示例,实际的实现取决于所需的模拟行为。
这只是解决问题的一种方法,还有很多其他方法。我很想听听您认为什么(不)方便。
这个问题有点老了。我想我会提供更新,因为这是一种很常见的情况。
Polymer CLI 是对 Polymer 元素进行单元测试的推荐方法。它用于测试的底层库称为 web-component-tester (WCT)。 WCT 支持存根元素。基本上,如果您的某个测试依赖于另一个元素来返回数据,您可以创建该元素的存根,该存根始终返回一致的数据。
单元测试代码中用于指定stub元素的JS:
setup(function() {
replace('paper-button').with('fake-paper-button');
});
待测试元素:
<dom-module id='x-el'>
<template>
<paper-button id="pb">button</paper-button>
</template>
</dom-module>
在测试运行时,内容模板将被标记为:
<dom-module id='x-el'>
<template>
<fake-paper-button id="pb">button</fake-paper-button>
</template>
</dom-module>
https://www.polymer-project.org/1.0/docs/tools/tests#create-stub-elements https://www.polymer-project.org/1.0/docs/tools/tests#create-stub-elements
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)