如何获得 Angular Dart 的代码覆盖率?

Eri*_* Li 6 testing code-coverage dart angular-dart

我尝试使用 packagecoverage从我的 Angular Dart 4.0 项目中获取代码覆盖率。

以下步骤是我的工作流程:

  1. pub serve test --port=8081
  2. pub run test --pub-serve=8081 --pause-after-load
  3. 等待测试运行器打印天文台 URL(例如http://127.0.0.1:12345
  4. pub global run coverage:collect_coverage --port=12345 -o coverage.json
  5. 按 Enter 恢复测试运行程序
  6. pub global run coverage:format_coverage --packages=.packages-c -i coverage.json -o coverage.report

在第5步之后,我会得到一个coverage.json包含一些数据的文件,但我不知道为什么覆盖率报告总是显示每个代码都没有覆盖。

我是否使用错误的流程来获取代码覆盖率?或者有什么更好的方法来做到这一点?

谢谢 !


有我的实验代码:

experiment_component.dart

import 'package:angular/angular.dart';

@Component(
  selector: 'experiment_component',
  template: '<h1>{{greeting}}</h1>'
)
class ExperimentComponent {

  String greeting = '';

  void greet() {
    greeting = 'Hello';
  }

}
Run Code Online (Sandbox Code Playgroud)

experiment_component_test.dart

@TestOn('browser')
@Tags(const ['aot'])
import 'package:angular/angular.dart';
import 'package:angular4_test/src/experiment_component.dart';
import 'package:angular_test/angular_test.dart';
import 'package:test/test.dart';

NgTestBed<ExperimentComponent> testBed;
NgTestFixture<ExperimentComponent> testFixture;

@AngularEntrypoint()
void main() {
  tearDown(disposeAnyRunningTest);

  setUp(() async {
    testBed = new NgTestBed<ExperimentComponent>();
    testFixture = await testBed.create();
  });

  test('should render Hello', () async {
    await testFixture.update((comp)=> comp.greet());
    expect(testFixture.text, contains('Hello'));
  });
}
Run Code Online (Sandbox Code Playgroud)

.packages-c

angular4_test:lib/
Run Code Online (Sandbox Code Playgroud)

coverage.report

|import 'package:angular/angular.dart';
|
|@Component(
|  selector: 'experiment_component',
|  template: '<h1>{{greeting}}</h1>'
|)
|class ExperimentComponent {
|
|  String greeting = '';
|
|  void greet() {
0    greeting = 'Hello';
|  }
|
|}
Run Code Online (Sandbox Code Playgroud)