使用Angular CLI进行单元测试和E2E测试的方法


Posted in Javascript onMarch 24, 2018

第一篇文章是: "使用angular cli生成angular5项目" :https://3water.com/article/136621.htm

第二篇文章是: "使用angular cli从蓝本生成代码" :https://3water.com/article/137031.htm

第三篇文章是: "使用Angular CLI生成路由" :https://3water.com/article/137033.htm

第四篇文章时: “使用Angular CLI进行Build (构建) 和 Serve”:https://3water.com/article/137034.htm

本文是该系列的最后一篇文章.

单元测试.

angular cli使用karma进行单元测试.

首先执行ng test --help或者ng test -h查看帮助.

执行测试的话就执行ng test即可, 它会执行项目里所有的.spec.ts文件.

而且它还会检测文件的变化, 如果文件有变化, 那么它会重新执行测试.

它应该在单独的终端进程中执行.

首先创建一个angular项目, 带路由的:

ng new sales --routing

创建好项目后, 直接执行命令测试:

ng test

使用Angular CLI进行单元测试和E2E测试的方法

然后会弹出一个页面, 就是测试的结果数据.

下面我再添加几个components 和 一个 admin module:

ng g c person
ng g c order
ng g m admin --routing
ng g c admin/user
ng g c admin/email

然后配置一下路由, 最重要得到这个效果:

使用Angular CLI进行单元测试和E2E测试的方法

这时我重新执行一下ng test:

使用Angular CLI进行单元测试和E2E测试的方法

尽管程序运行没有问题, 但是测试还是出现了问题: router-outlet is not an angular component.

可以看一下spec list:

使用Angular CLI进行单元测试和E2E测试的方法

使用Angular CLI进行单元测试和E2E测试的方法

这时因为运行测试的时候, admin模块是独立运行的, 所以该模块并没有引用Router模块, 所以无法识别router-outlet.

那么如何解决这个问题?

打开admin.component.spec.ts:

使用Angular CLI进行单元测试和E2E测试的方法

把这句话填上, 然后就没有错误了:

使用Angular CLI进行单元测试和E2E测试的方法

NO_ERRORS_SCHEMA告诉angular忽略那些不识别的元素或者元素属性.

  1. --code-coverage -cc 代码覆盖率报告, 默认这个是不开启的, 因为生成报告的速度还是比较慢的.
  2. --colors 输出结果使用各种颜色 默认开启
  3. --single-run -sr 执行测试, 但是不检测文件变化 默认不开启
  4. --progress 把测试的过程输出到控制台 默认开启
  5. --sourcemaps -sm 生成sourcemaps 默认开启
  6. --watch -w 运行测试一次, 并且检测变化 默认开启 

ng test 就是运行测试, 并且如果文件有变化, 就会重新运行测试.

使用ng test -sr或者ng test -w false 执行单次测试

测试代码覆盖率:

ng test --cc 的报告默认是生成在/coverage文件夹下, 但是可以通过修改.angular-cli.json里面的属性进行修改.

下面生成代码覆盖率报告:

ng test -sr -cc

通常是配合-sr参数使用的(运行一次测试).

然后会在项目的coverage文件夹里生成一些文件:

使用Angular CLI进行单元测试和E2E测试的方法

直接打开index.html:

使用Angular CLI进行单元测试和E2E测试的方法

可以看到都是100%, 这是因为我没有写任何代码.

然后我在user component里面添加一些代码:

使用Angular CLI进行单元测试和E2E测试的方法

再运行一次 ng test --sr -cc:

使用Angular CLI进行单元测试和E2E测试的方法

使用Angular CLI进行单元测试和E2E测试的方法

可以看到这部分代码并没有覆盖到.

如果我把代码里到 canGetUsers改为true:

使用Angular CLI进行单元测试和E2E测试的方法

再次执行ng test --sr -cc

可以看到这次代码覆盖率变化了:

使用Angular CLI进行单元测试和E2E测试的方法

只有catch部分没有覆盖到.

我认为代码覆盖率这个内置功能是非常好的.

Debug单元测试.

首先执行ng test:

使用Angular CLI进行单元测试和E2E测试的方法

然后点击debug, 并打开开发者工具:

使用Angular CLI进行单元测试和E2E测试的方法

然后按cmd+p:

找到需要调试的文件:

使用Angular CLI进行单元测试和E2E测试的方法

设置断点:

使用Angular CLI进行单元测试和E2E测试的方法

然后在spec里面也设置一个断点:

使用Angular CLI进行单元测试和E2E测试的方法

最后点击浏览器的刷新按钮即可:

使用Angular CLI进行单元测试和E2E测试的方法

E2E测试的参数.

实际上angular cli是配合着protractor来进行这个测试的.

它的命令是 ng e2e.

常用的参数有:

  1. --config -c 指定配置文件 默认是 protractor.conf.js
  2. --element-explorer -ee 打开protractor的元素浏览器
  3. --serve -s 在随机的端口编译和serve 默认true
  4. --specs -sp 默认是执行所有的spec文件, 如果想执行某个spec就使用这个参数, 默认是all
  5. --webdriver-update -wu 尝试更新webdriver 默认true

通常执行下面机组命令参数组合即可:

ng e2e
ng e2e -ee

Debug E2E测试.

看一下项目:

使用Angular CLI进行单元测试和E2E测试的方法

配置文件protractor.conf.js已经配置好.

而测试文件是在e2e目录下.

看一下spec和po文件:

使用Angular CLI进行单元测试和E2E测试的方法

使用Angular CLI进行单元测试和E2E测试的方法

再看一下app.component.html里面的值:

使用Angular CLI进行单元测试和E2E测试的方法

应该是没问题的.

所以执行ng e2e:

使用Angular CLI进行单元测试和E2E测试的方法

测试通过, 但是浏览器闪了一下就关闭了.

如果我想debug e2e, 那么执行这个命令:

ng e2e -ee

由于我使用的是mac, 当前这个命令在mac上貌似确实有一个bug:

使用Angular CLI进行单元测试和E2E测试的方法

如果可以正常运行这个命令的话, 终端窗口会出现“Debugger listening on xxx: ”字样, 然后就可以在下面输入变量或者表达式来查看它们的值从而进行调试了.

如果想退出调试, 那就按Ctrl+c或者输入.exit即可.

由于angular cli 更新比较快, 所以查看最新的功能最好还是看官方文档:https://github.com/angular/angular-cli/wiki

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery dialog 异步调用ashx,webservice数据的代码
Aug 03 Javascript
jQuery1.4.2与老版本json格式兼容的解决方法
Feb 12 Javascript
js中Math之random,round,ceil,floor的用法总结
Dec 26 Javascript
javascript 使用for循环时该注意的问题-附问题总结
Aug 19 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
Nov 18 Javascript
jQuery实现分隔条左右拖动功能
Nov 21 Javascript
javascript如何写热点图
Dec 08 Javascript
JavaScript正则表达式的分组匹配详解
Feb 13 Javascript
超实用的JavaScript代码段 附使用方法
May 22 Javascript
C#实现将一个字符转换为整数
Dec 12 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
Aug 12 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
Aug 22 Javascript
使用Angular CLI进行Build(构建)和Serve详解
Mar 24 #Javascript
使用Angular CLI生成路由的方法
Mar 24 #Javascript
使用Angular CLI从蓝本生成代码详解
Mar 24 #Javascript
详解Vue文档中几个易忽视部分的剖析
Mar 24 #Javascript
在vue中使用jointjs的方法
Mar 24 #Javascript
浅谈Vue下使用百度地图的简易方法
Mar 23 #Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
Mar 23 #jQuery
You might like
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
js+css实现打字效果
2020/06/24 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
解决node终端下运行js文件不支持ES6语法
2020/04/04 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
Python中的闭包实例详解
2014/08/29 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
selenium跳过webdriver检测并模拟登录淘宝
2019/06/12 Python
Django model select的多种用法详解
2019/07/16 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
Python实现手绘图效果实例分享
2020/07/22 Python
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
求高于平均分的学生学号及成绩
2016/09/01 面试题
幼儿园春游活动方案
2014/01/19 职场文书
生日寄语大全
2014/04/08 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
房产遗嘱范本
2015/08/06 职场文书
电力培训学习心得体会
2016/01/11 职场文书
公司与个人合作协议书
2016/03/19 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers