Polymer dart unittest:当HttpRequest.request()完成时运行test()

时间:2015-01-20 09:41:12

标签: unit-testing web-applications dart dart-polymer

我有一个用Polymer Dart编写的单页Web应用程序,现在是时候为它编写一些测试了,(不是测试的粉丝)。由于Selenium IDE / WebDriver不支持shadow DOM,我用dart的unittest包编写它,如下所示:

<!-- index.html (the single page app) -->
<title>My App</title>
<body>
  <my-app></my-app>
  <script type="application/dart" src="index_test.dart"></script>
</body>
// index_test.dart
import 'package:unittest/unittest.dart';
import 'dart:html';
import 'package:polymer/polymer.dart';

void main() {
  initPolymer().run(allTests);
}

void allTests() {
  test('First page should be "First Page"', () {
    expect(window.location.pathname, equals("/somepath"));
    expect(document.title, equals("First Page"));
  });

  test('Load Page 2', () {
    document
    .querySelector('my-app').shadowRoot
    .querySelector('paper-button')
    .click(); // load next page (without refresh)
    expect(document.title, equals("Second Page"));
  });
}

这个方法的问题是,当index.html加载时,它的标题是“我的应用程序”,然后,<my-app>开始工作,它从服务器加载一些JSON,更改标题和网址在基于JSON的位置栏中,假设它将标题更改为“First Page”,因为当JSON加载完成时不受dart控制(它受互联网速度控制),因此有时测试会成功,(JSON加载真的很快),有时测试失败,(网速很低)。

我的问题是,有没有办法告诉unittest在“正确”的时间运行测试,除了使用一些计时器等待?更好的是,可以通过触摸<my-app>的代码来完成,即从应用程序逻辑中分离测试代码吗?

1 个答案:

答案 0 :(得分:1)

因为我不知道<my-app>代码是什么样的,所以我无法判断它是否可以不加修改。

在加载JSON时,恕我直言在<my-app>中触发事件的最简单方法是在单元测试中监听此事件(请参阅How do I fire a custom event from Polymer Dart?),然后运行检查(expect(...) })在事件处理程序中。