Unit testing 如何在Dart编辑器中运行单元测试?
我在Dart编辑器中有一个web应用程序项目,我想为它编写一些单元测试。我试图在同一个项目中用一个简单的单元测试创建.dart文件(带有main函数等),但在上下文菜单中,我只有“作为javascript运行”和“在dartium中运行”选项(当我单击其中任何一个时,都不会发生任何事情)。如何从Dart编辑器以控制台应用程序的形式运行unittest?进行此类测试最方便的方法是什么?您说您有一个web应用程序项目,所以希望测试代码在浏览器中运行? 我从来没有体验过,对于控制台应用程序,Unit testing 如何在Dart编辑器中运行单元测试?,unit-testing,dart,dart-editor,Unit Testing,Dart,Dart Editor,我在Dart编辑器中有一个web应用程序项目,我想为它编写一些单元测试。我试图在同一个项目中用一个简单的单元测试创建.dart文件(带有main函数等),但在上下文菜单中,我只有“作为javascript运行”和“在dartium中运行”选项(当我单击其中任何一个时,都不会发生任何事情)。如何从Dart编辑器以控制台应用程序的形式运行unittest?进行此类测试最方便的方法是什么?您说您有一个web应用程序项目,所以希望测试代码在浏览器中运行? 我从来没有体验过,对于控制台应用程序,以java
以javascript运行,或者以Dartium运行。您是否在此dart文件中导入了“dart:html”
不管怎样,这也许能回答你的问题:
您可以使用content\u shell
运行unittests测试web代码
Dart安装目录包含一个用于下载content\u shell
的脚本(Dart安装包中不包含使其保持小型的脚本)
您实际上运行了一个HTML页面:
content\u shell--dump render tree\u ajax.html
我没有尝试过,但是当您使用
pub build test
您应该能够使用content\u shell
运行结果
DartEditor没有显示bash脚本的运行选项(只是尝试过),因此您需要构建一个包含content\u shell
的Dart脚本
Dart团队最近多次提到,他们希望改进测试故事,但运行/构建的基础设施仍在进行中。当这个问题解决后,我想下一步将进行测试支持。好的,我将描述最适合我的解决方案。
我在Dart编辑器中为测试创建了单独的项目(polymer web应用程序-与目标项目相同)。测试项目中的Main.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()
创建了一些漂亮的页面,列出了所有测试。我还尝试了useHtmlEnhancedConfiguration()
,如中所述,但它不打印堆栈跟踪(无论是在页面中还是在控制台中),因此它对我来说毫无用处。文档中也有useHtmlInteractiveConfiguration()
,但它不存在于unittest
包中。我实际上遇到了与问题中描述的完全相同的问题。经过一番搜索,我发现我的目录结构不正确
我的目录结构如下:
/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
文件,并在上下文菜单中选择“运行”(不是“以javascript方式运行”或“在dartium中运行”),并在dart编辑器的内置控制台中查看正在运行的测试
有关更多信息:完整的发布包布局约定可在此处找到:
有关dart中单元测试的信息可以在这里找到:(包括为html输出等内容配置测试环境)。我遇到了完全相同的问题。我想在模拟了UI元素之后对我的小部件(来自dart编辑器v1.3.3)的行为进行单元测试,但发现,因为我导入了dart:html,所以我被迫运行测试,就好像它们是一个带有“在浏览器中运行”菜单选项的web应用程序一样
似乎只要导入dart:html或一个这样做的包,您就必须使用单元测试的“在浏览器中运行”选项(创建另一个包来测试原始包也不能解决问题,出于同样的原因,它必须导入dart:html)。是的,尝试使用“在浏览器中运行”选项运行常规的单元测试只会悄悄地失败,并且完全不起任何作用
简单的解决方案是使用html文件来运行测试。如果愿意,您可以调整单元测试以输出到网页,但这不是必需的
test.html
单元测试结果
测试.省道
//用于说明问题。导入dart:html原因
//上下文菜单仅显示“在浏览器中运行”选项。
导入“dart:html”;
导入“包:unittest/unittest.dart”;
//如果要使用useHtmlConfiguration(),则为必需。
导入“package:unittest/html_config.dart”;
void main(){
//如果要输出单元测试结果,则需要
//转到HTML页面而不是控制台。
使用HTMLConfiguration();
test('simple test',()=>expect(true,isTrue,reason:'true不是true”);
}
我没有导入dart:html,但导入了导入dart:html的库(测试目标)。我只是瞎猜怎么做。我将尝试content\u shell
。无论如何,很高兴听到测试对dart团队很重要。