gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:02:33 24 4
gpt4 key购买 nike

我有一个用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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com