欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Angular Karma測(cè)試的持續(xù)集成實(shí)踐

 更新時(shí)間:2019年11月15日 10:15:01   作者:liumiaocn  
這篇文章主要介紹了詳解Angular Karma測(cè)試的持續(xù)集成實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

使用Angular + Karma + Jasmine可以進(jìn)行前端的單體測(cè)試,從前面的文章中我們了解到了Karma的工作原理,它會(huì)啟動(dòng)一個(gè)指定種類的瀏覽器,然后在此瀏覽器中運(yùn)行測(cè)試用例。如果需要進(jìn)行持續(xù)集成,比如結(jié)合Jenkins或者其他方式進(jìn)行自動(dòng)化的測(cè)試,如果需要手動(dòng)關(guān)閉瀏覽器的操作,或者無法提供圖形化的界面的情況保證測(cè)試的執(zhí)行這些都會(huì)成為持續(xù)集成的障礙,這篇文章整理一下解決的常見方法。

可使用瀏覽器的測(cè)試環(huán)境

當(dāng)測(cè)試環(huán)境可以使用瀏覽器,在這臺(tái)機(jī)器上使用ng test則能進(jìn)行測(cè)試,Karma會(huì)啟動(dòng)Chrome瀏覽器,然后執(zhí)行測(cè)試用例,持續(xù)集成的時(shí)候,Jenkins通過遠(yuǎn)程命令執(zhí)行的方式到可使用瀏覽器的測(cè)試環(huán)境中執(zhí)行ng test完成測(cè)試。

這種方式非常簡單,需要解決的只有一個(gè)問題,Angular 的demo應(yīng)用執(zhí)行ng test時(shí),執(zhí)行完畢之后,Chrome瀏覽器也不會(huì)退出,這樣Jenkins的調(diào)用部分也不會(huì)返回,只需要保證其執(zhí)行結(jié)束后立即關(guān)閉瀏覽器,這種方式就沒有問題了。而實(shí)際上Karma的設(shè)定文件中,singleRun正是這個(gè)選項(xiàng),缺省被設(shè)定為false,這就是其不退出的原因。只需要將此選項(xiàng)設(shè)定為true即可。demo示例的Karma設(shè)定文件改成如下即可:

liumiaocn:demo liumiao$ cp karma.conf.js karma.conf.js.origin
liumiaocn:demo liumiao$ vi karma.conf.js
liumiaocn:demo liumiao$ diff karma.conf.js karma.conf.js.origin 
29c29
<   singleRun: true,
---
>   singleRun: false,
liumiaocn:demo liumiao$

執(zhí)行日志如下所示:

liumiaocn:demo liumiao$ rm -rf coverage/
liumiaocn:demo liumiao$ ls
README.md      e2e         node_modules     src         tsconfig.spec.json
angular.json     karma.conf.js    package-lock.json  tsconfig.app.json  tslint.json
browserslist     karma.conf.js.origin package.json     tsconfig.json
liumiaocn:demo liumiao$ 
liumiaocn:demo liumiao$ ng test --code-coverage
30% building 12/12 modules 0 active31 10 2019 20:19:39.308:INFO [karma-server]: Karma v4.1.0 server started at http://0.0.0.0:9876/
31 10 2019 20:19:39.314:INFO [launcher]: Launching browsers Chrome with concurrency unlimited
30% building 13/13 modules 0 active31 10 2019 20:19:39.324:INFO [launcher]: Starting browser Chrome
31 10 2019 20:19:43.028:INFO [Chrome 78.0.3904 (Mac OS X 10.14.0)]: Connected on socket Pwhf3R-KNkzVDi1AAAAA with id 46366297
Chrome 78.0.3904 (Mac OS X 10.14.0): Executed 3 of 3 SUCCESS (0.373 secs / 0.321 secs)
TOTAL: 3 SUCCESS
TOTAL: 3 SUCCESS
TOTAL: 3 SUCCESS

=============================== Coverage summary ===============================
Statements  : 100% ( 6/6 )
Branches   : 100% ( 0/0 )
Functions  : 100% ( 1/1 )
Lines    : 100% ( 5/5 )
================================================================================
liumiaocn:demo liumiao$ ls
README.md      coverage       karma.conf.js.origin package.json     tsconfig.json
angular.json     e2e         node_modules     src         tsconfig.spec.json
browserslist     karma.conf.js    package-lock.json  tsconfig.app.json  tslint.json
liumiaocn:demo liumiao$ 

在這個(gè)過程中可以看到Chrome被自動(dòng)打開、執(zhí)行測(cè)試用例并顯示結(jié)果然后自動(dòng)退出了。通過遠(yuǎn)程方式調(diào)用應(yīng)該也沒有問題。不評(píng)價(jià)解決方法的好壞與局限性,這也是一種實(shí)現(xiàn)的方式。

無需打開瀏覽器的測(cè)試環(huán)境: PhantomJS

比如測(cè)試環(huán)境在一個(gè)基于Alpine版Linux的容器之中的情況下,無法使用或者不希望使用圖形化的瀏覽器的情況下,可以使用瀏覽器的Headless模式或者無界面方式的瀏覽器。PhantomJS就是這樣的一種解決方法,Phantom是一個(gè)隱形的瀏覽器,就像它的名字那樣,像一個(gè)“鬼魂/幻影/幽靈”,而事實(shí)上并沒有那么高深。PhantomJS是基于Webkit內(nèi)核的Headless模式,所以Webkit瀏覽器能做的事情,基本上它都能做,在之前爬蟲的一些使用場(chǎng)景中有需要愛好者的追隨。目前穩(wěn)定版本為2.1,短時(shí)間內(nèi)將為穩(wěn)定在這一版本,因?yàn)槟壳捌湟呀?jīng)暫停更新了,更新時(shí)間據(jù)說會(huì)另行通知,但是遲遲未到。使用這個(gè)暫時(shí)停更的PhantomJS也是一種解決方法,具體步驟如下。

步驟1: 安裝PhantomJS

安裝非常簡單,PhantomJS提供Windows/Linux/MacOS的二進(jìn)制文件,只需要將相應(yīng)的bin目錄加入到PATH搜素路徑中即完成了安裝,此處以MacOS上的安裝為例。

下載地址:https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-macosx.zip

解壓:解壓至/usr/local/phantomjs下

版本確認(rèn):phantomjs --version

liumiaocn:demo liumiao$ export PATH=$PATH:/usr/local/phantomjs/phantomjs-2.1.1-macosx/bin
liumiaocn:demo liumiao$ which phantomjs
/usr/local/phantomjs/phantomjs-2.1.1-macosx/bin/phantomjs
liumiaocn:demo liumiao$ phantomjs --version
2.1.1
liumiaocn:demo liumiao$ 

步驟2: 安裝karma-phantomjs-launcher

執(zhí)行日志入如下所示:

liumiaocn:demo liumiao$ npm install --save-dev karma-phantomjs-launcher

> phantomjs-prebuilt@2.1.16 install /Users/liumiao/Desktop/demo/node_modules/phantomjs-prebuilt
> node install.js

Considering PhantomJS found at /usr/local/phantomjs/phantomjs-2.1.1-macosx/bin/phantomjs
Found PhantomJS at /usr/local/phantomjs/phantomjs-2.1.1-macosx/bin/phantomjs ...verifying
Writing location.js file
PhantomJS is already installed on PATH at /usr/local/phantomjs/phantomjs-2.1.1-macosx/bin/phantomjs
npm WARN eslint-plugin-compat@3.3.0 requires a peer of eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 but none is installed. You must install peer dependencies yourself.

+ karma-phantomjs-launcher@1.0.4
added 16 packages from 36 contributors in 9.804s
liumiaocn:demo liumiao$ 

步驟3: 修改Karma的配置文件

將缺省的karma配置文件做如下修改即可

liumiaocn:demo liumiao$ diff karma.conf.js karma.conf.js.origin 
10c10
<    require('karma-phantomjs-launcher'),
---
>    require('karma-chrome-launcher'),
28,29c28,29
<   browsers: ['PhantomJS'],
<   singleRun: true,
---
>   browsers: ['Chrome'],
>   singleRun: false,
liumiaocn:demo liumiao$ 

修改說明:

  • 仍然需要將singleRun設(shè)定為true
  • 將chrome的launcher換成phantomjs
  • 將瀏覽器也從Chrome換成PhantomJS

如果使用的是Angular 8或者是es6的target設(shè)定需要將target做如下修改

liumiaocn:demo liumiao$ diff tsconfig.json tsconfig.json.org 
13c13
<   "target": "es5",
---
>   "target": "es2015",
liumiaocn:demo liumiao$ 

步驟3: 執(zhí)行測(cè)試

執(zhí)行ng test可以看到使用的是PhantomJS進(jìn)行的測(cè)試,而且在執(zhí)行過程中并沒有瀏覽器被打開和執(zhí)行。

liumiaocn:demo liumiao$ ng test --code-coverage
25% building 94/94 modules 0 active01 11 2019 06:11:48.490:INFO [karma-server]: Karma v4.1.0 server started at http://0.0.0.0:9876/
01 11 2019 06:11:48.493:INFO [launcher]: Launching browsers PhantomJS with concurrency unlimited
25% building 96/96 modules 0 active01 11 2019 06:11:48.573:INFO [launcher]: Starting browser PhantomJS
01 11 2019 06:11:52.035:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket PTR3E6eTdHOW0JcEAAAA with id 8370488
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 3 of 3 SUCCESS (0.512 secs / 0.769 secs)
TOTAL: 3 SUCCESS
TOTAL: 3 SUCCESS
TOTAL: 3 SUCCESS

=============================== Coverage summary ===============================
Statements  : 100% ( 7/7 )
Branches   : 100% ( 0/0 )
Functions  : 100% ( 2/2 )
Lines    : 100% ( 6/6 )
================================================================================
liumiaocn:demo liumiao$ 

此中方式由于PhantomJS已經(jīng)暫停更新,碰到問題時(shí)可能會(huì)較為尷尬,比如目前就出現(xiàn)在Angular 8升級(jí)是PhantomJS無法正常動(dòng)作的網(wǎng)上發(fā)帖求助,實(shí)際上修改為es5能解決大部分問題,所以選擇時(shí)需要慎重考慮。

無需打開瀏覽器的測(cè)試環(huán)境: Chrome的無頭模式

PhantomJS使用Webkit內(nèi)核,無需打開瀏覽器來完成測(cè)試,而實(shí)際上除去IE的很多瀏覽器都提供這種所謂的無頭(Headless)模式,Chrome也可以直接提供,在Chrome 59開始提供了headless mode(無頭模式)。在Angular 8中使用Chrome的無頭模式進(jìn)行測(cè)試非常簡單,只需要修改缺省的瀏覽器從Chrome到ChromeHeadless即可。

步驟1: 修改Karma的配置文件

將缺省的karma配置文件做如下修改即可

liumiaocn:demo liumiao$ diff karma.conf.js karma.conf.js.origin 
28,29c28,29
<   browsers: ['ChromeHeadless'],
<   singleRun: true,
---
>   browsers: ['Chrome'],
>   singleRun: false,
liumiaocn:demo liumiao$ 

修改說明:

  1. 仍然需要將singleRun設(shè)定為true
  2. 將瀏覽器從Chrome改成ChromeHeadless

步驟2: 執(zhí)行測(cè)試

執(zhí)行ng test可以看到使用的是ChromeHeadless進(jìn)行的測(cè)試,而且在執(zhí)行過程中并沒有瀏覽器被打開和執(zhí)行。

liumiaocn:demo liumiao$ ng test --code-coverage
25% building 15/15 modules 0 active01 11 2019 06:37:05.037:INFO [karma-server]: Karma v4.1.0 server started at http://0.0.0.0:9876/
01 11 2019 06:37:05.040:INFO [launcher]: Launching browsers ChromeHeadless with concurrency unlimited
25% building 93/93 modules 0 active01 11 2019 06:37:05.154:INFO [launcher]: Starting browser ChromeHeadless
01 11 2019 06:37:08.720:INFO [HeadlessChrome 78.0.3904 (Mac OS X 10.14.0)]: Connected on socket Br7fkzwejyGNs2WgAAAA with id 35869507
HeadlessChrome 78.0.3904 (Mac OS X 10.14.0): Executed 3 of 3 SUCCESS (0.374 secs / 0.319 secs)
TOTAL: 3 SUCCESS
TOTAL: 3 SUCCESS
TOTAL: 3 SUCCESS

=============================== Coverage summary ===============================
Statements  : 100% ( 7/7 )
Branches   : 100% ( 0/0 )
Functions  : 100% ( 2/2 )
Lines    : 100% ( 6/6 )
================================================================================
liumiaocn:demo liumiao$ 

總結(jié)

這篇文章介紹了三種常見的Karma的集成方式,由于PhantomJS暫停更新,并且其內(nèi)核只是Webkit,所以大多數(shù)情況直接使用瀏覽器的Headless Mode可能是個(gè)更好的主意。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Angular獲取ngIf渲染的Dom元素示例

    Angular獲取ngIf渲染的Dom元素示例

    這篇文章主要為大家介紹了Angular獲取ngIf渲染的Dom元素示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • angularJs自定義過濾器實(shí)現(xiàn)手機(jī)號(hào)信息隱藏的方法

    angularJs自定義過濾器實(shí)現(xiàn)手機(jī)號(hào)信息隱藏的方法

    今天小編就為大家分享一篇angularJs自定義過濾器實(shí)現(xiàn)手機(jī)號(hào)信息隱藏的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • AngularJS封裝指令方法詳解

    AngularJS封裝指令方法詳解

    這篇文章主要介紹了AngularJS封裝指令方法,結(jié)合實(shí)例形式詳細(xì)分析了AngularJS的功能、jQuery類庫協(xié)作及組件封裝的具體操作技巧,需要的朋友可以參考下
    2016-12-12
  • 詳解AngularJS實(shí)現(xiàn)表單驗(yàn)證

    詳解AngularJS實(shí)現(xiàn)表單驗(yàn)證

    這篇文章主要介紹了AngularJS實(shí)現(xiàn)表單驗(yàn)證,客戶端表單驗(yàn)證是AngularJS里面最酷的功能之一。AngularJS表單驗(yàn)證可以讓你從一開始就寫出一個(gè)具有交互性和可相應(yīng)的現(xiàn)代HTML5表單,對(duì)AngularJS表單驗(yàn)證感興趣的小伙伴們可以參考一下
    2015-12-12
  • AngularJS仿蘋果滑屏刪除控件

    AngularJS仿蘋果滑屏刪除控件

    前端開發(fā)中,為了對(duì)列表項(xiàng)進(jìn)行快捷操作,有時(shí)就添個(gè)按鈕來簡單實(shí)現(xiàn)。但是,有時(shí)會(huì)發(fā)現(xiàn)按鈕影響美觀,甚至影響列表行的布局。稍在網(wǎng)上搜索無果,而寫此仿蘋果滑屏刪除控件
    2016-01-01
  • Angular 應(yīng)用技巧總結(jié)

    Angular 應(yīng)用技巧總結(jié)

    這篇文章總結(jié)了一些Angular的應(yīng)用技巧,都是在實(shí)際項(xiàng)目中應(yīng)用了的,感覺對(duì)于使用Angular還是有一些幫助的,有需要的小伙伴可以參考下
    2016-09-09
  • angularJS 中input示例分享

    angularJS 中input示例分享

    這篇文章主要介紹了angularJS 中input示例分享,需要的朋友可以參考下
    2015-02-02
  • AngularJS 過濾器的簡單實(shí)例

    AngularJS 過濾器的簡單實(shí)例

    本文主要介紹AngularJS 過濾器,這里提供詳細(xì)了AngularJS 過濾器詳細(xì)資料,并提供簡單實(shí)例,有需要的朋友可以參考下
    2016-07-07
  • AngularJS 過濾器(自帶和自建)詳解

    AngularJS 過濾器(自帶和自建)詳解

    這篇文章主要介紹了AngularJS 過濾器(自帶和自建)詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • AngularJS學(xué)習(xí)筆記之基本指令(init、repeat)

    AngularJS學(xué)習(xí)筆記之基本指令(init、repeat)

    AngularJS 指令是擴(kuò)展的 HTML 屬性,帶有前綴 ng-。ng-app 指令初始化一個(gè) AngularJS 應(yīng)用程序。ng-init 指令初始化應(yīng)用程序數(shù)據(jù)。ng-model 指令把應(yīng)用程序數(shù)據(jù)綁定到 HTML 元素。
    2015-06-06

最新評(píng)論