unit-testing - Polymer Dart Unittest:在HttpRequest.request()完成后运行test()

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

我有一个用Polymer Dart编写的单页Web应用程序,现在是时候为其编写一些测试了(不是测试爱好者)。由于Selenium IDE / WebDriver不支持影子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更改了位置栏中的标题和url,然后说将标题更改为“首页”,因为当JSON加载完成时不受dart的控制(它由Internet速度控制),因此有时测试会成功(JSON加载非常快),有时测试会失败(互联网速度低)。

我的问题是,除了使用一些计时器等待之外,是否有办法告诉unittest在“正确的”时间运行测试?更好的是,可以在不触及<my-app>的代码(即将测试代码与应用程序逻辑分开)的情况下完成此操作吗?

最佳答案

因为我不知道<my-app>的代码看起来如何,所以我不知道是否可以不进行修改。

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

关于unit-testing - Polymer Dart Unittest:在HttpRequest.request()完成后运行test(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28042009/

相关文章:

c# - 流利的断言;结合集合和对象图比较断言

dart - 使用Dart petitparser构建表达式解析器,卡在节点访问者上

unit-testing - 单元测试 - 如何测试返回随机输出的函数?

android - 如何测试 Intent 是否已广播

angularjs - 如何将 AngularJS 与 xampp 一起使用但不使用 Node.js 进行服务器通信?

java - tomcat如何使用build.properties和build.xml?

web-applications - PhoneGap 或卡拉特拉瓦

Flutter:UI 与 Provider 的 react

facebook-graph-api - 如何使用 flutter 从 facebook graph api 获取更好的个人资料图片

java - 测试应用程序时出现 NullPointerException