【问题标题】:Angular - code coverage for the viewsAngular - 视图的代码覆盖率
【发布时间】:2018-05-18 18:56:04
【问题描述】:

在使用 Angular (2,4,5,...) 开发应用程序时,人们经常使用 *ngIf="whatever_condition",而 ngSwitch 也很少使用

但是,我还没有看到任何工具能够提供有关实际测试了多少代码的信息。..

显然对于 Typescript 文件,有 istanbul loader 来获得覆盖率,但我认为它给出了具有高覆盖率的错误画面,因为大部分逻辑位于没有测量的视图中。即如果我在 Typescript 上的分支覆盖率为 90%,但视图中的分支仍然是原来的两倍,那么实际覆盖率可能在 45% 到 90% 之间。

是否有任何工具能够测量 Angular 视图的代码覆盖率并以有意义的方式显示它?

【问题讨论】:

  • Webstorm has code coverage 但是我没用过。
  • 我真的看不出这有多大帮助.. Angular 模板被编译为 javascript,并且执行的内容和模板本身之间没有链接.. 除非我错了,你只需要知道如何配置它..
  • *ngIf="whatever_condition" 中的逻辑有多复杂。 code coverage for karma 通常会考虑逻辑所在的文件。 It's a code smell 并且您应该考虑将whatever_condition 放在控制器中,因为您不需要测试视图。
  • 我完全同意,按照所有正常标准,这是一种代码异味,但这是“Angular 2+ 方式”,我相信我还需要为此声明找到相关来源..

标签: angular unit-testing code-coverage


【解决方案1】:

我没有研究过模板的覆盖率,但是,您可以研究一下组件测试与单元测试。

我通常会做以下事情:

it('',()=>{
  component.whatever_condition = true;
  const el = fixture.debugElement.query(By.css('someElement'));

  fixture.detectChanges();

  expect(el).toBeDefined();
});

我意识到这并没有为您提供覆盖范围,但它为您的模板提供了测试。

注意考虑是否需要 e2e 测试

希望对你有帮助

【讨论】:

  • 抱歉,问题是关于覆盖率测量而不是测试视图。我正在测试“角度方式”,这正是您所建议的,但问题是我不知道测试了什么,而不仅仅是通过查看工具。我也知道,即使是代码覆盖率也不是真正的案例覆盖率,但这是不同的讨论......
  • 对我来说,您似乎想测试一些不属于您的责任。通过模型绑定基于数据更新视图是 Angular 所做的,因此它超出了您的测试范围。可以假设框架完成了预期的工作。
  • 我不是在测试 Angular 是否正常工作。如果我解释一下你的意思 - 我用 Typescript 编写的测试条件不是我的责任,因为 Typescript 保证能正确执行它们。我我希望你现在应该明白我的意思了:)
  • 你能解释一下为什么吗?我的印象是,作为一名开发人员,我应该测试我正在编写的所有代码,我想你也在这样做(根据你的回答)。但是,如果您确实涵盖了视图中的代码,您似乎并不感兴趣。我知道,仅通过阅读代码,您就可以判断您是否有足够的测试,但我个人仍然希望有一些自动指标..
  • 我的意思是你没有(不应该)在视图中有代码。 *ngIf 不是你的代码,它是一个角度指令,测试 Angulars 代码不是你的工作,就像你不测试 for 循环是否完成它的工作一样
猜你喜欢
  • 2018-05-08
  • 2012-06-30
  • 2022-11-30
  • 2018-01-11
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
相关资源
最近更新 更多