使用Angular CLI進(jìn)行單元測(cè)試和E2E測(cè)試的方法
第一篇文章是: "使用angular cli生成angular5項(xiàng)目" :http://www.dbjr.com.cn/article/136621.htm
第二篇文章是: "使用angular cli從藍(lán)本生成代碼" :http://www.dbjr.com.cn/article/137031.htm
第三篇文章是: "使用Angular CLI生成路由" :http://www.dbjr.com.cn/article/137033.htm
第四篇文章時(shí): “使用Angular CLI進(jìn)行Build (構(gòu)建) 和 Serve”:http://www.dbjr.com.cn/article/137034.htm
本文是該系列的最后一篇文章.
單元測(cè)試.
angular cli使用karma進(jìn)行單元測(cè)試.
首先執(zhí)行ng test --help或者ng test -h查看幫助.
執(zhí)行測(cè)試的話就執(zhí)行ng test即可, 它會(huì)執(zhí)行項(xiàng)目里所有的.spec.ts文件.
而且它還會(huì)檢測(cè)文件的變化, 如果文件有變化, 那么它會(huì)重新執(zhí)行測(cè)試.
它應(yīng)該在單獨(dú)的終端進(jìn)程中執(zhí)行.
首先創(chuàng)建一個(gè)angular項(xiàng)目, 帶路由的:
ng new sales --routing
創(chuàng)建好項(xiàng)目后, 直接執(zhí)行命令測(cè)試:
ng test
然后會(huì)彈出一個(gè)頁(yè)面, 就是測(cè)試的結(jié)果數(shù)據(jù).
下面我再添加幾個(gè)components 和 一個(gè) 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
然后配置一下路由, 最重要得到這個(gè)效果:
這時(shí)我重新執(zhí)行一下ng test:
盡管程序運(yùn)行沒(méi)有問(wèn)題, 但是測(cè)試還是出現(xiàn)了問(wèn)題: router-outlet is not an angular component.
可以看一下spec list:
這時(shí)因?yàn)檫\(yùn)行測(cè)試的時(shí)候, admin模塊是獨(dú)立運(yùn)行的, 所以該模塊并沒(méi)有引用Router模塊, 所以無(wú)法識(shí)別router-outlet.
那么如何解決這個(gè)問(wèn)題?
打開(kāi)admin.component.spec.ts:
把這句話填上, 然后就沒(méi)有錯(cuò)誤了:
NO_ERRORS_SCHEMA告訴angular忽略那些不識(shí)別的元素或者元素屬性.
- --code-coverage -cc 代碼覆蓋率報(bào)告, 默認(rèn)這個(gè)是不開(kāi)啟的, 因?yàn)樯蓤?bào)告的速度還是比較慢的.
- --colors 輸出結(jié)果使用各種顏色 默認(rèn)開(kāi)啟
- --single-run -sr 執(zhí)行測(cè)試, 但是不檢測(cè)文件變化 默認(rèn)不開(kāi)啟
- --progress 把測(cè)試的過(guò)程輸出到控制臺(tái) 默認(rèn)開(kāi)啟
- --sourcemaps -sm 生成sourcemaps 默認(rèn)開(kāi)啟
- --watch -w 運(yùn)行測(cè)試一次, 并且檢測(cè)變化 默認(rèn)開(kāi)啟
ng test 就是運(yùn)行測(cè)試, 并且如果文件有變化, 就會(huì)重新運(yùn)行測(cè)試.
使用ng test -sr或者ng test -w false 執(zhí)行單次測(cè)試
測(cè)試代碼覆蓋率:
ng test --cc 的報(bào)告默認(rèn)是生成在/coverage文件夾下, 但是可以通過(guò)修改.angular-cli.json里面的屬性進(jìn)行修改.
下面生成代碼覆蓋率報(bào)告:
ng test -sr -cc
通常是配合-sr參數(shù)使用的(運(yùn)行一次測(cè)試).
然后會(huì)在項(xiàng)目的coverage文件夾里生成一些文件:
直接打開(kāi)index.html:
可以看到都是100%, 這是因?yàn)槲覜](méi)有寫(xiě)任何代碼.
然后我在user component里面添加一些代碼:
再運(yùn)行一次 ng test --sr -cc:
可以看到這部分代碼并沒(méi)有覆蓋到.
如果我把代碼里到 canGetUsers改為true:
再次執(zhí)行ng test --sr -cc
可以看到這次代碼覆蓋率變化了:
只有catch部分沒(méi)有覆蓋到.
我認(rèn)為代碼覆蓋率這個(gè)內(nèi)置功能是非常好的.
Debug單元測(cè)試.
首先執(zhí)行ng test:
然后點(diǎn)擊debug, 并打開(kāi)開(kāi)發(fā)者工具:
然后按cmd+p:
找到需要調(diào)試的文件:
設(shè)置斷點(diǎn):
然后在spec里面也設(shè)置一個(gè)斷點(diǎn):
最后點(diǎn)擊瀏覽器的刷新按鈕即可:
E2E測(cè)試的參數(shù).
實(shí)際上angular cli是配合著protractor來(lái)進(jìn)行這個(gè)測(cè)試的.
它的命令是 ng e2e.
常用的參數(shù)有:
- --config -c 指定配置文件 默認(rèn)是 protractor.conf.js
- --element-explorer -ee 打開(kāi)protractor的元素瀏覽器
- --serve -s 在隨機(jī)的端口編譯和serve 默認(rèn)true
- --specs -sp 默認(rèn)是執(zhí)行所有的spec文件, 如果想執(zhí)行某個(gè)spec就使用這個(gè)參數(shù), 默認(rèn)是all
- --webdriver-update -wu 嘗試更新webdriver 默認(rèn)true
通常執(zhí)行下面機(jī)組命令參數(shù)組合即可:
ng e2e ng e2e -ee
Debug E2E測(cè)試.
看一下項(xiàng)目:
配置文件protractor.conf.js已經(jīng)配置好.
而測(cè)試文件是在e2e目錄下.
看一下spec和po文件:
再看一下app.component.html里面的值:
應(yīng)該是沒(méi)問(wèn)題的.
所以執(zhí)行ng e2e:
測(cè)試通過(guò), 但是瀏覽器閃了一下就關(guān)閉了.
如果我想debug e2e, 那么執(zhí)行這個(gè)命令:
ng e2e -ee
由于我使用的是mac, 當(dāng)前這個(gè)命令在mac上貌似確實(shí)有一個(gè)bug:
如果可以正常運(yùn)行這個(gè)命令的話, 終端窗口會(huì)出現(xiàn)“Debugger listening on xxx: ”字樣, 然后就可以在下面輸入變量或者表達(dá)式來(lái)查看它們的值從而進(jìn)行調(diào)試了.
如果想退出調(diào)試, 那就按Ctrl+c或者輸入.exit即可.
由于angular cli 更新比較快, 所以查看最新的功能最好還是看官方文檔:https://github.com/angular/angular-cli/wiki
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- angularjs中的單元測(cè)試實(shí)例
- AngularJs unit-testing(單元測(cè)試)詳解
- 利用Jasmine對(duì)Angular進(jìn)行單元測(cè)試的方法詳解
- AngularJS 單元測(cè)試(一)詳解
- 在JavaScript的AngularJS庫(kù)中進(jìn)行單元測(cè)試的方法
- AngularJS 單元測(cè)試(二)詳解
- 對(duì)Angular.js Controller如何進(jìn)行單元測(cè)試
- Angular單元測(cè)試之事件觸發(fā)的實(shí)現(xiàn)
- 淺談Angular單元測(cè)試總結(jié)
- Angular進(jìn)行簡(jiǎn)單單元測(cè)試的實(shí)現(xiàn)方法實(shí)例
相關(guān)文章
AngularJS對(duì)動(dòng)態(tài)增加的DOM實(shí)現(xiàn)ng-keyup事件示例
這篇文章主要介紹了AngularJS對(duì)動(dòng)態(tài)增加的DOM實(shí)現(xiàn)ng-keyup事件示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03angular安裝import?echarts?from‘echarts‘標(biāo)紅報(bào)錯(cuò)解決
這篇文章主要介紹了angular安裝import?echarts?from‘echarts‘標(biāo)紅報(bào)錯(cuò)解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10詳解在Angularjs中ui-sref和$state.go如何傳遞參數(shù)
這篇文章主要介紹了詳解在Angularjs中ui-sref和$state.go如何傳遞參數(shù),詳細(xì)的介紹了ui-sref和$state.go的區(qū)別和如何傳參,有興趣的可以了解下2017-04-04詳解angular中通過(guò)$location獲取路徑(參數(shù))的寫(xiě)法
本篇文章主要介紹了詳解angular中通過(guò)$location獲取路徑(參數(shù))的寫(xiě)法 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03Angular中AuthGuard路由守衛(wèi)的創(chuàng)建使用
這篇文章主要為大家介紹了Angular中AuthGuard路由守衛(wèi)的創(chuàng)建使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Angular.js自定義指令學(xué)習(xí)筆記實(shí)例
這篇文章主要介紹了Angular.js自定義指令的實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02angularJS 發(fā)起$http.post和$http.get請(qǐng)求的實(shí)現(xiàn)方法
本篇文章主要介紹了angularJS 發(fā)起$http.post和$http.get請(qǐng)求的實(shí)現(xiàn)方法,分別介紹了$http.post和$http.get請(qǐng)求的方法,有興趣的可以了解一下2017-05-05