2

我正在尝试为 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>

知道我做错了什么吗?

4

1 回答 1

2

piratebadge.html只是同一个包中的一个文件,但与您的单元测试没有任何关系。 '#inputName'未找到,因为该test.html文件不包含它。

您可以尝试在此问题DART - exception in unit testing 中讨论的尝试

于 2014-08-27T10:18:48.060 回答