Dart单元测试依赖于html的库中的类

Igo*_*vić 7 unit-testing dart

我有一个使用的库,CanvasElement因此依赖于它dart:html.现在我正在尝试为同一个库编写单元测试.但是,尝试运行它时出现以下错误:

The built-in library 'dart:html' is not available on the stand-alone VM.
Run Code Online (Sandbox Code Playgroud)

以下是我的测试文件的样子:

library PiflexUmlTest;

import 'package:PiflexUml/lib.dart';
import 'package:unittest/unittest.dart';

part 'src/geometry/vector_test.dart';

main () {
  testVector();
}
Run Code Online (Sandbox Code Playgroud)

我知道它失败了,因为lib.dart文件中的库本身有一行说明:

library PiflexUml;
// ....
import 'dart:html';

part "blahblah.dart";
part "something_else.dart"
// ....
Run Code Online (Sandbox Code Playgroud)

尽管库本身依赖于它,但我并不是要尝试测试与HTML有关的类.

我的解决方案是什么?有没有办法只导入我想测试的类而不导入整个lib?或者我是否必须将我的lib拆分为依赖于html的部分和非HTML依赖部分?

Gün*_*uer 5

您可以使用content_shell(无头浏览器)运行基于浏览器的单元测试.

DartEditor安装到的文件夹(darteditor/chromium/download_contentshell.sh)包含一个脚本文件,用于下载包含的部分content_shell.

您需要一个content_shell运行测试的HTML文件.HTML文件可能看起来像

<!doctype html>
<html>
  <body>
  <script src="packages/unittest/test_controller.js"></script>
  <script type="application/dart" src="browser_tests.dart"></script> <!-- your unit tests -->
  <script src="packages/browser/dart.js"></script>      </body>
</html>
Run Code Online (Sandbox Code Playgroud)

飞镖单元测试

import 'package:unittest/unittest.dart';
import 'package:unittest/html_config.dart';

main() {
  useHtmlConfiguration();

  test('test scope', () {
    ...
  });
}
Run Code Online (Sandbox Code Playgroud)

也许你的用例有点过分,但仍然是一个解决方案.

编辑
还有一个关于这个问题的讨论:https: //groups.google.com/a/dartlang.org/forum/#!topic/misc/pacB66gnVcg