【发布时间】:2018-08-12 16:56:17
【问题描述】:
我对如何在编写 Dart 应用程序时为单元测试启用代码覆盖感到困惑。我有许多非基于 Web 的测试——它们测试我的 Web 应用程序使用的域模型的方法。这些方法不需要在浏览器中运行进行单元测试。
现在,我通过为“在 /test 目录中运行所有测试”创建运行配置,在 Idea Intellij 社区版 IDE 中运行它们。
我也可以像这样通过终端运行它们:“pub run test”。
我已阅读以下指南:
https://dart-lang.github.io/observatory/code-coverage.html
但是我似乎无法得到任何工作。按照上面的指南,我假设我必须从终端执行此操作:
$ collect_coverage --uri=http://... -o coverage.json --resume-isolates
但我看不到任何地方可以得到提到的 URI。文档说“其中 --uri 指定了 VM 发出的 Observatory URI。”
Okaaaay... 我在哪里可以看到 VM 发出的 URI?
阅读指南的其他部分,我发现我可以像这样在 Observatory 中启动独立的 Dart 应用程序:
$ dart --observe <script>.dart
我尝试选择一个单元测试文件并使用该命令调用它,如下所示:
$ dart --observe test/die_roll_test.dart
Observatory listening on http://127.0.0.1:8181/
00:00 +0: can be constructed from a String
00:00 +1: should create normalized DieRoll
00:00 +2: can denormalize
00:00 +3: can add
00:00 +4: can subtract
00:00 +5: can multiply
00:00 +6: can divide
00:00 +7: All tests passed!
vm-service: isolate(297422250) 'die_roll_test.dart:main()' has no debugger attached and is paused at exit. Connect to Observatory at http://127.0.0.1:8181/ to debug.
在我的浏览器中访问 URL http://127.0.0.1:8181 会产生一个标题为“Dart VM Observatory”的空白页面。
无论如何,我都可以尝试使用该 URL 发出代码覆盖率命令:
$ collect_coverage --uri=http://127.0.0.1:8181 coverage.json --resume-isolates
这会吐出一大堆文本,但我没有看到在任何地方创建了 coverage.json 文件。
理想情况下,这可以与 IDE 集成,因此我可以在运行单元测试时选择覆盖作为选项。但即使我必须使用命令行实用程序,我该如何让它工作呢?
如果有帮助,我将在 Mac OS X 10.13 High Sierra 上运行,使用 Dart 2.0.0 并测试 1.3.0。
【问题讨论】:
标签: unit-testing dart