溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在Angular CLI中進(jìn)行單元測試

發(fā)布時(shí)間:2021-03-29 15:55:42 來源:億速云 閱讀:207 作者:Leah 欄目:web開發(fā)

怎么在Angular CLI中進(jìn)行單元測試?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

單元測試.

angular cli使用karma進(jìn)行單元測試.

首先執(zhí)行ng test --help或者ng test -h查看幫助.

執(zhí)行測試的話就執(zhí)行ng test即可, 它會(huì)執(zhí)行項(xiàng)目里所有的.spec.ts文件.

而且它還會(huì)檢測文件的變化, 如果文件有變化, 那么它會(huì)重新執(zhí)行測試.

它應(yīng)該在單獨(dú)的終端進(jìn)程中執(zhí)行.

首先創(chuàng)建一個(gè)angular項(xiàng)目, 帶路由的:

ng new sales --routing

創(chuàng)建好項(xiàng)目后, 直接執(zhí)行命令測試:

ng test

怎么在Angular CLI中進(jìn)行單元測試

然后會(huì)彈出一個(gè)頁面, 就是測試的結(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è)效果:

怎么在Angular CLI中進(jìn)行單元測試

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

怎么在Angular CLI中進(jìn)行單元測試

盡管程序運(yùn)行沒有問題, 但是測試還是出現(xiàn)了問題: router-outlet is not an angular component.

可以看一下spec list:

怎么在Angular CLI中進(jìn)行單元測試

怎么在Angular CLI中進(jìn)行單元測試

這時(shí)因?yàn)檫\(yùn)行測試的時(shí)候, admin模塊是獨(dú)立運(yùn)行的, 所以該模塊并沒有引用Router模塊, 所以無法識(shí)別router-outlet.

那么如何解決這個(gè)問題?

打開admin.component.spec.ts:

怎么在Angular CLI中進(jìn)行單元測試

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

怎么在Angular CLI中進(jìn)行單元測試

NO_ERRORS_SCHEMA告訴angular忽略那些不識(shí)別的元素或者元素屬性.

  1. --code-coverage -cc 代碼覆蓋率報(bào)告, 默認(rèn)這個(gè)是不開啟的, 因?yàn)樯蓤?bào)告的速度還是比較慢的.

  2. --colors 輸出結(jié)果使用各種顏色 默認(rèn)開啟

  3. --single-run -sr 執(zhí)行測試, 但是不檢測文件變化 默認(rèn)不開啟

  4. --progress 把測試的過程輸出到控制臺(tái) 默認(rèn)開啟

  5. --sourcemaps -sm 生成sourcemaps 默認(rèn)開啟

  6. --watch -w 運(yùn)行測試一次, 并且檢測變化 默認(rèn)開啟 

ng test 就是運(yùn)行測試, 并且如果文件有變化, 就會(huì)重新運(yùn)行測試.

使用ng test -sr或者ng test -w false 執(zhí)行單次測試

測試代碼覆蓋率:

ng test --cc 的報(bào)告默認(rèn)是生成在/coverage文件夾下, 但是可以通過修改.angular-cli.json里面的屬性進(jìn)行修改.

下面生成代碼覆蓋率報(bào)告:

ng test -sr -cc

通常是配合-sr參數(shù)使用的(運(yùn)行一次測試).

然后會(huì)在項(xiàng)目的coverage文件夾里生成一些文件:

怎么在Angular CLI中進(jìn)行單元測試

直接打開index.html:

怎么在Angular CLI中進(jìn)行單元測試

可以看到都是100%, 這是因?yàn)槲覜]有寫任何代碼.

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

怎么在Angular CLI中進(jìn)行單元測試

再運(yùn)行一次 ng test --sr -cc:

怎么在Angular CLI中進(jìn)行單元測試

怎么在Angular CLI中進(jìn)行單元測試

可以看到這部分代碼并沒有覆蓋到.

如果我把代碼里到 canGetUsers改為true:

怎么在Angular CLI中進(jìn)行單元測試

再次執(zhí)行ng test --sr -cc

可以看到這次代碼覆蓋率變化了:

怎么在Angular CLI中進(jìn)行單元測試

只有catch部分沒有覆蓋到.

我認(rèn)為代碼覆蓋率這個(gè)內(nèi)置功能是非常好的.

Debug單元測試.

首先執(zhí)行ng test:

怎么在Angular CLI中進(jìn)行單元測試

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

怎么在Angular CLI中進(jìn)行單元測試

然后按cmd+p:

找到需要調(diào)試的文件:

怎么在Angular CLI中進(jìn)行單元測試

設(shè)置斷點(diǎn):

怎么在Angular CLI中進(jìn)行單元測試

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

怎么在Angular CLI中進(jìn)行單元測試

最后點(diǎn)擊瀏覽器的刷新按鈕即可:

怎么在Angular CLI中進(jìn)行單元測試

E2E測試的參數(shù).

實(shí)際上angular cli是配合著protractor來進(jìn)行這個(gè)測試的.

它的命令是 ng e2e.

常用的參數(shù)有:

  1. --config -c 指定配置文件 默認(rèn)是 protractor.conf.js

  2. --element-explorer -ee 打開protractor的元素瀏覽器

  3. --serve -s 在隨機(jī)的端口編譯和serve 默認(rèn)true

  4. --specs -sp 默認(rèn)是執(zhí)行所有的spec文件, 如果想執(zhí)行某個(gè)spec就使用這個(gè)參數(shù), 默認(rèn)是all

  5. --webdriver-update -wu 嘗試更新webdriver 默認(rèn)true

通常執(zhí)行下面機(jī)組命令參數(shù)組合即可:

ng e2e
ng e2e -ee

Debug E2E測試.

看一下項(xiàng)目:

怎么在Angular CLI中進(jìn)行單元測試

配置文件protractor.conf.js已經(jīng)配置好.

而測試文件是在e2e目錄下.

看一下spec和po文件:

怎么在Angular CLI中進(jìn)行單元測試

怎么在Angular CLI中進(jìn)行單元測試

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

怎么在Angular CLI中進(jìn)行單元測試

應(yīng)該是沒問題的.

所以執(zhí)行ng e2e:

怎么在Angular CLI中進(jìn)行單元測試

測試通過, 但是瀏覽器閃了一下就關(guān)閉了.

如果我想debug e2e, 那么執(zhí)行這個(gè)命令:

ng e2e -ee

由于我使用的是mac, 當(dāng)前這個(gè)命令在mac上貌似確實(shí)有一個(gè)bug:

怎么在Angular CLI中進(jìn)行單元測試

關(guān)于怎么在Angular CLI中進(jìn)行單元測試問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI