我正在尝试为 Pirate Badge 教程编写一个测试,旨在让人们开始使用 Dart。
我有以下目录结构:
6-piratebadge 中的代码是教程中的原始版本。
我添加的是测试包。
test/test.html 包含:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script type="application/dart" src="test.dart"></script>
<script type="text/javascript" src="packages/unittest/test_controller.js"></script>
</body>
</html>
和 test/test.dart 包含:
import 'package:unittest/unittest.dart';
import 'package:unittest/html_config.dart';
import 'dart:html';
import '../6-piratebadge/piratebadge.dart' as app;
void main() {
useHtmlConfiguration();
app.main();
var button = querySelector("#generateButton");
test('button text', (){
expect(button.text, equals('Aye! Gimme a name!'));
});
}
我从 web 上面的目录中运行这样的测试:
Content\ Shell web/test/test.html
我得到“错误:脚本错误”。(我故意不使用 --dump-render-tree 所以我可以在启动的浏览器的控制台中检查输出)。它的本质似乎是这个消息:
5500:1287:0827/110337:24546692395575:INFO:CONSOLE(0)] "Exception: The null object does not have a getter 'onInput'.
NoSuchMethodError: method not found: 'onInput'
Receiver: null
Arguments: []", source: file:///Users/mikehogan/projects/learning/one-hour-codelab-master/web/6-piratebadge/piratebadge.dart (0)
这发生在 piratebadge.dart 的这些行中:
void main() {
InputElement inputField = querySelector('#inputName');
inputField.onInput.listen(updateBadge);
所以我猜没有找到 ID 为“inputName”的输入。
它在piratebadge.html中:
<div>
<input type="text" id="inputName" maxlength="15" disabled>
</div>
知道我做错了什么吗?