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