【发布时间】:2014-12-18 12:49:48
【问题描述】:
我正在开发一个使用 Polymer 组件编写的应用程序,并且正在为我们的自定义组件自动化一些单元测试。理想情况下,我希望能够拥有类似的东西
files: [
'public/js/bower/platform/platform.js',
'node_modules/sinon/pkg/sinon-1.10.2.js',
'public/components/*.html',
{pattern: 'public/components/*.js', included: false, served: true},
{pattern: 'public/js/bower/**', included: false, served: true},
{pattern: 'public/js/*.js', included: false, served: true},
'test/components/polymer-*-tests.js'
],
在我的karma.confg.js 文件中,以便它加载我们将来添加的任何组件和测试,而无需手动添加它们。然而,虽然这正确地导致了 components 文件夹中所有组件的<link rel="import">s,但只有第一个被 Polymer 正确注册(其余的测试都失败了)。如果我手动将每个组件添加到列表中,例如:
files: [
'public/js/bower/platform/platform.js',
'node_modules/sinon/pkg/sinon-1.10.2.js',
'public/components/poly-component-1.html',
'public/components/poly-component-2.html',
'public/components/poly-component-3.html',
{pattern: 'public/components/*.js', included: false, served: true},
{pattern: 'public/js/bower/**', included: false, served: true},
{pattern: 'public/js/*.js', included: false, served: true},
'test/components/polymer-*-tests.js'
],
然后一切正常。如果我添加类似于
的内容,我也会让它工作var link = document.createElement('link');
link.rel = 'import';
link.href = 'base/public/components/<component-name>.html;
document.getElementsByTagName('head')[0].appendChild(link);
在每个测试文件的开头,或创建一个引导脚本
components = [
'polymer-component-1',
'polymer-component-2',
'polymer-component-3'];
for (var i = 0; i < components.length; i++) {
var link = document.createElement('link');
link.rel = 'import';
link.href = '/base/public/components/' + components[i] + '.html';
document.getElementsByTagName('head')[0].appendChild(link);
}
并确保 karma 在测试之前加载它。但是,这三种解决方案都涉及手动编辑文件(或记住在测试文件的开头包含一些通常不存在的样板文件)。
有没有人知道为什么使用通配符模式似乎不起作用? Karma 似乎确实将 html 导入正确地添加到上下文 iframe 中,并且组件的 html 和 js 文件正在加载到浏览器中。组件似乎没有注册。
【问题讨论】:
标签: polymer karma-runner