内置库' dart:html'在独立VM上不可用

时间:2015-05-12 02:23:16

标签: dart dart-polymer dart-unittest

我希望能够对我的定制聚合物元素进行单元测试。

给定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

1 个答案:

答案 0 :(得分:3)

您需要为测试创建一个html页面并在浏览器中运行测试。新的test包有一个不错的自述文件,解释了如何做到这一点。 (我有一个问题,浏览器经常测试超时。这是一个已知的问题,很快就会修复。)

<强>更新 有关如何动态创建Polymer元素的信息,请参阅Instantiating polymer element via dart codeDynamically 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-elementchild-element是我在测试中使用的聚合物元素(如你的Foo)

另一次更新 我假设您需要使用自定义HTML文件(尚未尝试),以进行聚合物测试,因为否则无法为变换器注册入口点。 然后将html文件作为入口点添加到pubspec.yaml

中的Polymer transformer部分