我正在尝试为 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>
知道我做错了什么吗?
最佳答案
piratebadge.html
只是同一包中的一个文件,但与您的单元测试没有任何关系。
找不到 '#inputName'
,因为 test.html
文件不包含它。
您可以尝试此问题 DART - exception in unit testing 中讨论的尝试
关于dart - 在 Dart 单元测试中访问 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25524401/