如何在Dart编辑器中运行单元测试?

时间:2014-04-19 16:46:42

标签: unit-testing dart dart-editor

我在Dart编辑器中有Web应用程序项目,我想为它编写一些单元测试。我尝试在同一个项目中使用简单的单元测试创​​建.dart文件(使用main函数等)但是在上下文菜单中我只运行了javascript'和'dartium'选项(当我点击其中任何一个没有任何反应时)。如何从Dart编辑器中将unittest作为控制台应用程序运行?进行此类测试最方便的方法是什么?

4 个答案:

答案 0 :(得分:5)

我有完全相同的问题。我想单独测试我的小部件的行为(来自飞镖编辑器v1.3.3)模拟了UI元素,但发现,因为我导入 dart:html ,我被迫运行这些测试好像是一个带有'在浏览器中运行'菜单选项之一的Web应用程序。

似乎只要您导入 dart:html 或执行此操作的软件包,您就会遇到单位测试中的'Run in browser'选项(创建另一个包以测试原始包也无法解决问题,出于同样的原因,它必须导入 dart:html 一个)。是的,尝试使用'在浏览器中运行'选项运行常规单元测试只是无声地失败并完全没有。

简单解决方案是使用html文件来运行测试。如果您愿意,可以调整单元测试以输出到网页,但这不是必需的。

<强>的test.html

<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Unit Test Results</title>
  </head>

  <body>
    <script type="application/dart" src="test.dart"></script>
    <script src="packages/browser/dart.js"></script>
  </body>
</html>

<强> test.dart

// Used to illustrate the problem. Importing dart:html causes
// the context menu to show only the 'Run in browser' options.
import 'dart:html';

import 'package:unittest/unittest.dart';

// Required if you want to use useHtmlConfiguration().
import 'package:unittest/html_config.dart';

void main() {
    // Required if you want to output the unit test results
    // to the HTML page rather than the console.
    useHtmlConfiguration();

    test ('simple test', () => expect(true, isTrue, reason:"true isn't true"));
}

答案 1 :(得分:2)

我实际上遇到了问题中描述的完全相同的问题。经过一番搜索,我发现我的目录结构不正确。

我的目录结构如下:

/projectname
  /web
    index.html
    main.dart
    /test
      test_file.dart

错误。我将目录结构更改为以下内容:

/projectname
  /web
    index.html
    main.dart
  /test
    test_file.dart

如您所见,我将/test目录移出/web目录。一旦我这样做,我现在就可以右键单击test_file.dart文件,然后选择“运行”&#39;在上下文菜单中(&#39;以javascript&#39运行;或者&#39;在dartium&#39;中运行)并查看在dart的内置控制台中运行的测试编辑器。

有关详细信息:可以在此处找到完整的pub包布局约定:https://www.dartlang.org/tools/pub/package-layout.html

有关dart中单元测试的信息可以在这里找到:https://www.dartlang.org/articles/dart-unit-tests/#configuring-the-test-environment(包括为html输出之类的东西配置测试环境......)

答案 2 :(得分:1)

您说您有一个Web应用程序项目,因此您想要在浏览器中运行的测试代码? 我从未体验到我有run as javascriptrun in Dartium用于控制台应用程序。你在这个dart文件中导入了'dart:html'吗?

无论如何,这可能会回答你的问题:

您可以使用content_shell运行测试网络代码的单元测试 Dart安装目录包含一个用于下载content_shell的脚本(它不是Dart安装包的一部分,以保持它的小)。

您实际上是在运行HTML页面:

content_shell --dump-render-tree polymer_ajax.html

我没有尝试,但是当您使用

将测试代码构建到JavaScript时
pub build test

您应该能够使用content_shell运行结果 DartEditor没有显示bash脚本的运行选项(刚刚尝试过),因此您需要构建一个调用content_shell的Dart脚本。

Dart团队最近多次提到他们希望改进测试故事,但运行/构建的基础设施仍在进行中。当这个问题解决后,我猜测试支持将在下一个工作。

答案 3 :(得分:1)

好的,我将描述最适合我的解决方案。 我在Dart编辑器中创建了单独的测试项目(聚合物Web应用程序 - 与目标项目相同)。测试项目中的主.html文件导入.dart文件,如下所示:

library foo_test;
import '../../foo_project/web/foo.dart'; //test target
import '../packages/mock/mock.dart';
import '../packages/unittest/unittest.dart';
import '../packages/unittest/html_config.dart';

void main() {
    useHtmlConfiguration();

    test("sample test", () {
        expect(foo_function(), equals(expected_result) );
    });
}

useHtmlConfiguration()创建了一个包含所有测试的好页面。我也按照https://www.dartlang.org/articles/dart-unit-tests/中的说明尝试了useHtmlEnhancedConfiguration(),但它没有打印堆栈跟踪(既不在页面也不在控制台中),所以对我来说它没用。文档中还有useHtmlInteractiveConfiguration(),但它在unittest包中不存在。