我希望能够对我的定制聚合物元素进行单元测试。
给定lib / web_components中的一个组件:
class Foo extends PolymerElement {
Foo.created() : super.created();
}
和test / web_components中的测试:
main() {
test("Should Be a PolymerElement", (){
Foo undertest = new Foo.created();
expect(undertest, new isInstanceOf<PolymerElement>());
});
}
运行测试会导致标题中提到的错误。我怎样才能避免这个错误?
编辑:
所以我尝试在客户端测试文件的顶部添加@TestOn('content-shell')
,并在服务器端测试中添加@TestOn('vm')
。
在Grinder我有:
@Task('Test')
test() {
new PubApp.local('test').run([]);
new PubApp.local('test').run(["-p", "content-shell"]);
}
服务器端测试运行正常,但客户端测试会抛出以下错误:
pub run test -p content-shell test/web_component/foo_test.dart
"Failed to start content shell: No such file or directory"
编辑2:
我尝试使用以下命令在dartium平台上运行,因为content-shell似乎不起作用:
pub run test:test -p dartium test/web_component/foo_test.dart
结果是:
Failed to load "test/web_component/foo_test.dart": type 'test.backend.declarer.Declarer' is not a subtype of type 'test.backend.declarer.Declarer' of 'function result'.
packages/test/test.dart 44:32 _declarer
packages/test/test.dart 108:5 test
foo_test.dart 9:3 main
package:test IframeListener.start
foo_test.dart.browser_test.dart 6:18 main
答案 0 :(得分:3)
您需要为测试创建一个html页面并在浏览器中运行测试。新的test
包有一个不错的自述文件,解释了如何做到这一点。 (我有一个问题,浏览器经常测试超时。这是一个已知的问题,很快就会修复。)
<强>更新强> 有关如何动态创建Polymer元素的信息,请参阅Instantiating polymer element via dart code,Dynamically create polymer element。
而不是main()
使用
@whenPolymerReady
init() {
@TestOn('content-shell')
没问题,但最好使用@TestOn('browser')
,然后使用-p
参数(-pchrome
,-pdartium
,{{1}指定具体的浏览器},-pfirefox
,...请参阅测试自述文件以获取支持的浏览器列表。您可以一次传递多个-pcontent-shell
以在多个浏览器上运行测试。
您还可以使用自定义HTML页面进行测试
-p
其中文件名必须与Dart测试文件相同,但<!doctype html>
<!-- custom_html_test.html -->
<html>
<head>
<title>browser/polymer test</title>
<link rel="import" href="app_element.html">
<link rel="import" href="child_element.html">
<link rel="x-dart-test" href="html_test.dart">
<script src="packages/test/dart.js"></script>
</head>
<body>
<div id="granny">
<div>
<div id="parent">
<div>
<div id="child">child</div>
</div>
</div>
</div>
</div>
<app-element id="polymer-parent" unresolved>
<child-element id="polymer-child"></child-element>
</app-element>
</body>
</html>
除外,文件扩展名为.html
,<link rel="x-dart-test" href="html_test.dart">
表示您的Dart测试文件。 app-element
,child-element
是我在测试中使用的聚合物元素(如你的Foo)
另一次更新
我假设您需要使用自定义HTML文件(尚未尝试),以进行聚合物测试,因为否则无法为变换器注册入口点。
然后将html文件作为入口点添加到pubspec.yaml