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

问题描述 投票:7回答:2

我有一个使用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依赖部分?

unit-testing dart
2个回答
5
投票

您可以使用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>


0
投票

这似乎在较新版本的测试包中得到修复。有一个新参数'--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

© www.soinside.com 2019 - 2024. All rights reserved.