使用Angular CLI進(jìn)行單元測試和E2E測試的方法
第一篇文章是: "使用angular cli生成angular5項目" :http://www.dhdzp.com/article/136621.htm
第二篇文章是: "使用angular cli從藍(lán)本生成代碼" :http://www.dhdzp.com/article/137031.htm
第三篇文章是: "使用Angular CLI生成路由" :http://www.dhdzp.com/article/137033.htm
第四篇文章時: “使用Angular CLI進(jìn)行Build (構(gòu)建) 和 Serve”:http://www.dhdzp.com/article/137034.htm
本文是該系列的最后一篇文章.
單元測試.
angular cli使用karma進(jìn)行單元測試.
首先執(zhí)行ng test --help或者ng test -h查看幫助.
執(zhí)行測試的話就執(zhí)行ng test即可, 它會執(zhí)行項目里所有的.spec.ts文件.
而且它還會檢測文件的變化, 如果文件有變化, 那么它會重新執(zhí)行測試.
它應(yīng)該在單獨的終端進(jìn)程中執(zhí)行.
首先創(chuàng)建一個angular項目, 帶路由的:
ng new sales --routing
創(chuàng)建好項目后, 直接執(zhí)行命令測試:
ng test

然后會彈出一個頁面, 就是測試的結(jié)果數(shù)據(jù).
下面我再添加幾個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
然后配置一下路由, 最重要得到這個效果:

這時我重新執(zhí)行一下ng test:

盡管程序運行沒有問題, 但是測試還是出現(xiàn)了問題: router-outlet is not an angular component.
可以看一下spec list:


這時因為運行測試的時候, admin模塊是獨立運行的, 所以該模塊并沒有引用Router模塊, 所以無法識別router-outlet.
那么如何解決這個問題?
打開admin.component.spec.ts:

把這句話填上, 然后就沒有錯誤了:

NO_ERRORS_SCHEMA告訴angular忽略那些不識別的元素或者元素屬性.
- --code-coverage -cc 代碼覆蓋率報告, 默認(rèn)這個是不開啟的, 因為生成報告的速度還是比較慢的.
- --colors 輸出結(jié)果使用各種顏色 默認(rèn)開啟
- --single-run -sr 執(zhí)行測試, 但是不檢測文件變化 默認(rèn)不開啟
- --progress 把測試的過程輸出到控制臺 默認(rèn)開啟
- --sourcemaps -sm 生成sourcemaps 默認(rèn)開啟
- --watch -w 運行測試一次, 并且檢測變化 默認(rèn)開啟
ng test 就是運行測試, 并且如果文件有變化, 就會重新運行測試.
使用ng test -sr或者ng test -w false 執(zhí)行單次測試
測試代碼覆蓋率:
ng test --cc 的報告默認(rèn)是生成在/coverage文件夾下, 但是可以通過修改.angular-cli.json里面的屬性進(jìn)行修改.
下面生成代碼覆蓋率報告:
ng test -sr -cc
通常是配合-sr參數(shù)使用的(運行一次測試).
然后會在項目的coverage文件夾里生成一些文件:

直接打開index.html:

可以看到都是100%, 這是因為我沒有寫任何代碼.
然后我在user component里面添加一些代碼:

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


可以看到這部分代碼并沒有覆蓋到.
如果我把代碼里到 canGetUsers改為true:

再次執(zhí)行ng test --sr -cc
可以看到這次代碼覆蓋率變化了:

只有catch部分沒有覆蓋到.
我認(rèn)為代碼覆蓋率這個內(nèi)置功能是非常好的.
Debug單元測試.
首先執(zhí)行ng test:

然后點擊debug, 并打開開發(fā)者工具:

然后按cmd+p:
找到需要調(diào)試的文件:

設(shè)置斷點:

然后在spec里面也設(shè)置一個斷點:

最后點擊瀏覽器的刷新按鈕即可:

E2E測試的參數(shù).
實際上angular cli是配合著protractor來進(jìn)行這個測試的.
它的命令是 ng e2e.
常用的參數(shù)有:
- --config -c 指定配置文件 默認(rèn)是 protractor.conf.js
- --element-explorer -ee 打開protractor的元素瀏覽器
- --serve -s 在隨機(jī)的端口編譯和serve 默認(rèn)true
- --specs -sp 默認(rèn)是執(zhí)行所有的spec文件, 如果想執(zhí)行某個spec就使用這個參數(shù), 默認(rèn)是all
- --webdriver-update -wu 嘗試更新webdriver 默認(rèn)true
通常執(zhí)行下面機(jī)組命令參數(shù)組合即可:
ng e2e ng e2e -ee
Debug E2E測試.
看一下項目:

配置文件protractor.conf.js已經(jīng)配置好.
而測試文件是在e2e目錄下.
看一下spec和po文件:


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

應(yīng)該是沒問題的.
所以執(zhí)行ng e2e:

測試通過, 但是瀏覽器閃了一下就關(guān)閉了.
如果我想debug e2e, 那么執(zhí)行這個命令:
ng e2e -ee
由于我使用的是mac, 當(dāng)前這個命令在mac上貌似確實有一個bug:

如果可以正常運行這個命令的話, 終端窗口會出現(xiàn)“Debugger listening on xxx: ”字樣, 然后就可以在下面輸入變量或者表達(dá)式來查看它們的值從而進(jìn)行調(diào)試了.
如果想退出調(diào)試, 那就按Ctrl+c或者輸入.exit即可.
由于angular cli 更新比較快, 所以查看最新的功能最好還是看官方文檔:https://github.com/angular/angular-cli/wiki
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
AngularJS模塊學(xué)習(xí)之Anchor Scroll
這篇文章主要介紹了AngularJS模塊學(xué)習(xí)之Anchor Scroll 的相關(guān)資料,需要的朋友可以參考下2016-01-01
angularjs+bootstrap實現(xiàn)自定義分頁的實例代碼
本篇文章主要介紹了angularjs+bootstrap實現(xiàn)自定義分頁的實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
AngularJS實現(xiàn)的錨點樓層跳轉(zhuǎn)功能示例
這篇文章主要介紹了AngularJS實現(xiàn)的錨點樓層跳轉(zhuǎn)功能,涉及AngularJS事件響應(yīng)實現(xiàn)錨點跳轉(zhuǎn)功能的相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
AngularJS利用Controller完成URL跳轉(zhuǎn)
本文的主要內(nèi)容是介紹在AngularJS中怎樣利用Controller實現(xiàn)URL跳轉(zhuǎn),本文給出了實例代碼,簡單明了,有需要的可以參考學(xué)習(xí)。2016-08-08
基于AngularJS實現(xiàn)頁面滾動到底自動加載數(shù)據(jù)的功能
本文主要給大家介紹基于AngularJS實現(xiàn)頁面滾動到底自動加載數(shù)據(jù)的功能,通過第三方控件來實現(xiàn),感興趣的朋友跟著小編一起看看具體實現(xiàn)代碼吧2015-10-10

