dart - 在 Dart 单元测试中访问 DOM

标签 dart functional-testing dart-unittest

我正在尝试为 Pirate Badge 教程编写一个测试,旨在让人们开始使用 Dart。

我有以下目录结构:

Project Structure of Pirate Badge with tests

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/

相关文章:

javascript - 如何使用 postman 测试检查API响应中的一个节点在所有对象下是否具有相同的值?

javascript - 在本地主机上针对静态 Web 应用程序运行实习生功能测试

dart - 如何为包含子字符串的字符串创建匹配器,同时忽略大小写

dart - 为什么异步测试通过了,但是显示了一些错误消息?

flutter - 运行flutter pub升级的错误在5分钟后停止

dart - 调用对象字段作为 ListTile 属性

dart - 一个如何更新ListView子级?

Dart 程序在没有执行最后一条语句的情况下退出

dart - 模拟类(class)时发出警告

测试整个程序。最佳实践