Angular 如何从量角器调用角度组件测试?

Angular 如何从量角器调用角度组件测试?,angular,protractor,Angular,Protractor,我有一个香草Angular7项目,它是通过ngCLI生成的,其中有一个我想测试的组件:src/app/mini-cal/mini-cal.component.spec.ts 我不知道如何要求angular cli工具为我执行此操作,以下组合失败了: ng test --specs='src/app/mini-cal/mini-cal.component.spec.ts' ng test -- --specs='src/app/mini-cal/mini-cal.component.spec.ts

我有一个香草Angular7项目,它是通过
ng
CLI生成的,其中有一个我想测试的组件:
src/app/mini-cal/mini-cal.component.spec.ts

我不知道如何要求angular cli工具为我执行此操作,以下组合失败了

ng test --specs='src/app/mini-cal/mini-cal.component.spec.ts'
ng test -- --specs='src/app/mini-cal/mini-cal.component.spec.ts'
所以我决定像这样指向量角器:

protractor e2e/protractor.conf.js --specs='src/app/mini-cal/mini-cal.component.spec.ts'
在获取感兴趣的文件时起作用,但缺少以下附加配置:

  • 地带

    - Failed: Zone is needed for the async() test helper
              but could not be found. Please make sure
              that your environment includes
              zone.js/dist/zone.js
    
  • 试验台初始化
    - Failed: Cannot read property 'injector' of null
    
通常所有这些都可以在
src/test.ts中找到,并由
ng test
自动使用。。。但是现在我通过
量角器
启动这个过程,我需要以某种方式将它合并到我的
e2e/dragrator.conf.js
文件的
onPrepare()
方法中


我如何才能做到这一点?

因为您正在测试单个组件,所以我相信您正在尝试编写和运行单元测试,而不是e2e(端到端)测试。单元测试通常只测试一个小单元(如组件、服务或功能),并有目的地确定其范围,以确保该单元执行预期的操作,而不必担心外部单元是如何实现的。一个端到端测试(我从来没有写过这样的测试,所以如果我错了,请纠正我的错误)会启动整个应用程序,并与之交互,以测试各单元是否正常工作(想想测试整个页面,多个页面) 组件交互、导航等)

Angular CLI使用Karma test runner在浏览器环境中运行单元测试,并使用量角器进行e2e测试(我不知道量角器如何运行测试的细节)。请参阅。因此,
ng test
运行Karma,
ng e2e
运行量角器。这两种类型的测试都使用Jasmine作为实际编写测试代码的测试框架

其他人似乎一直在努力运行单个单元测试。您可以使用Jasmine的聚焦测试功能,通过将单个
it
descripe
块更改为
fit
fdescribe
来显示输出。但这并不能阻止编译或加载其他测试文件中的代码,只会阻止其他
descripe
it
块运行。你可以看到做其他事情的尝试

我很喜欢在我所有的React测试中使用Jest,我相信Jest提供了更好的测试运行体验(能够通过模式匹配运行特定测试,仅在git工作副本中的更改文件上运行,交互式监视模式,更新快照等)。您可以查看以了解如何仅运行特定测试。Jest既是一个测试框架(在很大程度上是Jasmine语法的副本),也是一个测试运行程序。Jest可以使用或节点来运行测试,而不需要运行真正的浏览器。看起来Karma现在也支持jsdom了


如果您想走Jest路线,使用似乎是将Jest添加到角度项目中的最简单方法,并且有相应的解决方案。

您是在尝试进行单元测试还是e2e测试?您正在指定一个文件,使其看起来像一个单元测试。Angular CLI使用Jasmine(测试框架)和Karma(测试运行程序)进行单元测试,并使用量角器进行e2e测试:。您的测试文件是什么样子的?IMHO Jest提供了更好的测试运行体验(通过模式匹配运行特定测试的能力,仅在git工作副本中的更改文件上运行,交互式观看模式,快照等)。啊,我想你已经发现了我理解中的漏洞。我想测试组件,所以我在做单元测试,而不是e2e,不应该尝试使用量角器!我想现在不用看量角器来指定一个特定的测试文件。。。我应该考虑另一种选择,比如开玩笑。请随意添加您的评论作为答案,以便我将其标记为正确的解决方案。我有大量使用Jasmine/Karma与AngularJS和Jest与React的经验,但没有使用Angular2+进行测试。不知道Angular CLI用于测试的效果如何,也不知道Jest与Angular的配合效果如何。(我曾经尝试过与AngularJS一起使用Jest,但无法使配置完全正常工作。)因此,如果事情没有按计划进行,请不要恨我:)如果您想尝试Jest路线,这些链接使它看起来非常简单,谢谢@scotty waggoner。。。这都是合法的。另外,因为我只是尝试测试组件内部的一些功能,所以组件的UI行为并没有那么多。。。使用TypeScript设置单元测试  指出组件文件也对我有用: