我有一个使用qazxsw poi的库,因此依赖于qazxsw poi。现在我正在尝试为同一个库编写单元测试。但是,尝试运行它时出现以下错误:
CanvasElement
以下是我的测试文件的样子:
dart:html
我理解它失败了因为The built-in library 'dart:html' is not available on the stand-alone VM.
文件中的库本身有一行说明:
library PiflexUmlTest;
import 'package:PiflexUml/lib.dart';
import 'package:unittest/unittest.dart';
part 'src/geometry/vector_test.dart';
main () {
testVector();
}
尽管库本身依赖于它,但我并不是要尝试测试与HTML有关的类。
我的解决方案是什么?有没有办法只导入我想测试的类而不导入整个lib?或者我是否必须将我的lib拆分为依赖于html的部分和非HTML依赖部分?
您可以使用lib.dart
(无头浏览器)运行基于浏览器的单元测试。
DartEditor安装到的文件夹(darteditor / chromium / download_contentshell.sh)包含一个脚本文件,用于下载包含library PiflexUml;
// ....
import 'dart:html';
part "blahblah.dart";
part "something_else.dart"
// ....
的部件。
您需要一个由content_shell
运行并运行测试的HTML文件。 HTML文件可能看起来像
content_shell
飞镖单元测试
content_shell
也许你的用例有点过分,但仍然是一个解决方案。
编辑
还有一个关于这个问题的讨论:<!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>
这似乎在较新版本的测试包中得到修复。有一个新参数'--platform'接受浏览器作为值,所以:
import 'package:unittest/unittest.dart';
import 'package:unittest/html_config.dart';
main() {
useHtmlConfiguration();
test('test scope', () {
...
});
}
将您的测试编译为javascript并在chrome上运行它们。
如果您正在编写一个应该在两个位置都有效的库,您还可以使用@TestOn注释或testOn参数来test()或group()来指定'vm'或'browser'。
见https://groups.google.com/a/dartlang.org/forum/#!topic/misc/pacB66gnVcg