• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 網(wǎng)絡(luò)軟件教程 > 詳細(xì)頁面

        Mocha與chai的使用

        Mocha與chai的使用

        更新時(shí)間:2025-09-20 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

        導(dǎo)微信(WeChat)是騰訊公司于2011年1月21日推出的一個(gè)為智能終端提供即時(shí)通訊服務(wù)的免費(fèi)應(yīng)用程序,由張小龍所帶領(lǐng)的騰訊廣州研發(fā)中心產(chǎn)品團(tuán)隊(duì)打造 [2] 。微信支持跨通信運(yùn)營(yíng)商、跨操作系統(tǒng)平臺(tái)...
        微信(WeChat)是騰訊公司于2011年1月21日推出的一個(gè)為智能終端提供即時(shí)通訊服務(wù)的免費(fèi)應(yīng)用程序,由張小龍所帶領(lǐng)的騰訊廣州研發(fā)中心產(chǎn)品團(tuán)隊(duì)打造 [2] 。微信支持跨通信運(yùn)營(yíng)商、跨操作系統(tǒng)平臺(tái)通過網(wǎng)絡(luò)快速發(fā)送免費(fèi)(需消耗少量網(wǎng)絡(luò)流量)語音短信、視頻、圖片和文字,同時(shí),也可以使用通過共享流媒體內(nèi)容的資料和基于位置的社交插件“搖一搖”、“漂流瓶”、“朋友圈”、”公眾平臺(tái)“、”語音記事本“等服務(wù)插件。
        這次給大家?guī)鞰ocha與chai的使用,Mocha與chai使用的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。

        Mocha 的簡(jiǎn)介

        Mocha是流行的JavaScript測(cè)試框架之一,通過它添加和運(yùn)行測(cè)試,從而保證代碼質(zhì)量

        Mocha 的安裝與配置

        全局安裝Mocha

        npm install -g mocha

        項(xiàng)目中也安裝Mocha

        npm install --save-dev mocha

        在package.json中加入下面腳本:

        "scripts": {
            "test": "mocha"
        }

        Mocha 的使用

        在使用前,我們先看一下我們用來使用的測(cè)試項(xiàng)目的結(jié)構(gòu):
        項(xiàng)目結(jié)構(gòu)圖

        如上圖所示,測(cè)試文件需要放在test目錄下,mocka運(yùn)行時(shí)會(huì)執(zhí)行test目錄下的所有js文件(僅限于test以下這一層級(jí),對(duì)test/subtest這一層級(jí)并不執(zhí)行)。

        其中index.js為我們的被測(cè)試代碼:

        /**
         * 加法函數(shù)
         * @param {第一個(gè)數(shù)} a 
         * @param {第二個(gè)數(shù)} b 
         */
        function addNum(a,b){
            return a+b;
        }
        module.exports=addNum;

        而index.test.js為我們的測(cè)試代碼(注意這里的命名加了一個(gè)test,并不是必須的,只是為了好區(qū)分哪些是測(cè)試文件):

        var addNum=require('../src/index')
        
        describe('測(cè)試index.js', function() {
          describe('測(cè)試addNum函數(shù)', function() {
            it('兩數(shù)相加結(jié)果為兩個(gè)數(shù)字的和', function() {
               if(addNum(1,2)!==3){
                 throw new Error("兩數(shù)相加結(jié)果不為兩個(gè)數(shù)字的和");
               }
            });
          });
        });

        解析一下以上代碼的語法:

        測(cè)試腳本里面應(yīng)該包括一個(gè)或多個(gè)describe塊,每個(gè)describe塊應(yīng)該包括一個(gè)或多個(gè)it塊。
        describe塊稱為"測(cè)試套件"(test suite),表示一組相關(guān)的測(cè)試。它是一個(gè)函數(shù),第一個(gè)參數(shù)是測(cè)試套件的名稱("測(cè)試index.js"),第二個(gè)參數(shù)是一個(gè)實(shí)際執(zhí)行的函數(shù)。
        it塊稱為"測(cè)試用例"(test case),表示一個(gè)單獨(dú)的測(cè)試,是測(cè)試的最小單位。它也是一個(gè)函數(shù),第一個(gè)參數(shù)是測(cè)試用例的名稱("兩數(shù)相加結(jié)果為兩個(gè)數(shù)字的和"),第二個(gè)參數(shù)是一個(gè)實(shí)際執(zhí)行的函數(shù)。

        在上面的例子中,測(cè)試addNum函數(shù),如果運(yùn)行錯(cuò)誤拋出異常

        此時(shí)運(yùn)行

        npm test

        就可得到以下結(jié)果
        運(yùn)行正確的結(jié)果圖

        為了看一下運(yùn)行錯(cuò)誤的結(jié)果,此時(shí)我們修改index.js的代碼為:

        function addNum(a,b){
            return a+b-1;
        }
        module.exports=addNum;

        再次運(yùn)行

        npm test

        結(jié)果如下:
        image.png

        Mocha與斷言庫chai

        在上面的Mocha例子中,測(cè)試失敗用拋異常來處理,多少有點(diǎn)繁瑣,所以就有了斷言庫的出現(xiàn)。
        這里我們介紹一個(gè)常用的斷言庫chai。
        可以簡(jiǎn)單理解為這就是對(duì)我們上面拋異常方法的一個(gè)封裝,當(dāng)判斷失敗時(shí)會(huì)拋出一個(gè)異常。
        首先安裝chai:

        npm install --save-dev chai

        接著讓我們用chai修改一下上面的index.test.js:

        var expect = require('chai').expect;
        var addNum=require('../src/index')
        
        describe('測(cè)試index.js', function() {
          describe('測(cè)試addNum函數(shù)', function() {
            it('兩數(shù)相加結(jié)果為兩個(gè)數(shù)字的和', function() {
              expect(addNum(1,2)).to.be.equal(3);
            });
          });
        });

        上面的語法很接近自然語言,expect(期待)一個(gè)表達(dá)式的結(jié)果equal(等于)一個(gè)表達(dá)式。
        運(yùn)行

        npm test

        得到以下結(jié)果:
        斷言庫chai結(jié)果

        可以看出圖中的斷言庫還打印出了期望的結(jié)果3和實(shí)際的結(jié)果2。
        如果用判斷來拋異常的話會(huì)繁瑣得多。

        以上語法為chai的expect語法,它還有should語法和asset語法。
        如果是以前用過java和.NET的話,對(duì)asset可能更適應(yīng)一點(diǎn):

        var assert = require('chai').assert;
        
        assert.typeOf(foo, 'string');
        assert.equal(foo, 'bar');
        assert.lengthOf(foo, 3)
        assert.property(tea, 'flavors');
        assert.lengthOf(tea.flavors, 3);

        這其中的語法意思很明顯,這里就不再贅述了。

        Mocha的更多使用

        如果想測(cè)試單一的測(cè)試js,可以用:

        mocha test/index.test.js

        或者多個(gè)js

        mocha test/index.test.js test/add.test.js

        當(dāng)然也可以用通配符測(cè)試某個(gè)文件夾下所有的js和jsx:

        mocha 'test/some/*.@(js|jsx)'

        Mocha與ES6

        在上面我們用的并非是ES6的語法,那么讓我們把其中的代碼都改為ES6的語法。
        其中index.js為:

        /**
         * 加法函數(shù)
         * @param {第一個(gè)數(shù)} a 
         * @param {第二個(gè)數(shù)} b 
         */
        export default (a,b)=>{
            return a+b-1;
        }

        而index.test.js為:

        import {assert} from 'chai'
        import addNum from '../src/index'
        
        describe('測(cè)試index.js',()=> {
          describe('測(cè)試addNum函數(shù)', ()=> {
            it('兩數(shù)相加結(jié)果為兩個(gè)數(shù)字的和', ()=> {
              assert.equal(addNum(1,2),3)
            })
          })
        })

        此時(shí)直接運(yùn)行mock肯定是不行的,我們現(xiàn)需要安裝一下babel:

        npm install babel-core babel-preset-es2015 --save-dev

        然后,在項(xiàng)目目錄下面,新建一個(gè).babelrc文件:

        {
          "presets": [ "es2015" ]
        }

        接著講package.json中的腳本改為:

        "scripts": {
          "test": "mocha --compilers js:babel-core/register"
        },

        其中--compilers參數(shù)用來指定測(cè)試腳本的轉(zhuǎn)碼器,這行命令的意思是運(yùn)行mocha時(shí)先用babel-core/register模塊,處理一下.js文件

        注意:
        --compilers將會(huì)在未來被移除,官方稱它是redundant(累贅的),而作為替代方案的是

        "scripts": {
          "test": "mocha --require babel-core/register"
        },

        命令變得更加簡(jiǎn)單了

        Mocha測(cè)試用例執(zhí)行的超時(shí)和高亮

        Mocha默認(rèn)每個(gè)測(cè)試用例最多執(zhí)行2000毫秒,如果到時(shí)沒有得到結(jié)果,就報(bào)錯(cuò)。以下命令設(shè)置超時(shí)時(shí)間為5000:

        mocha -t 5000 index.test.js

        Mocha默認(rèn)會(huì)高亮顯示超過75毫秒的測(cè)試用例,以下命令設(shè)置高亮判斷的臨界值:

        mocha -s 1000 index.test.js

        Mocha測(cè)試的鉤子

        Mocha在describe塊之中,提供測(cè)試用例的四個(gè)鉤子:before()、after()、beforeEach()和afterEach()。它們會(huì)在指定時(shí)間執(zhí)行。

        describe('測(cè)試index.js',()=> {
          before(()=>console.info("在本區(qū)塊的所有測(cè)試用例之前執(zhí)行"))
        
          after(()=>console.info("在本區(qū)塊的所有測(cè)試用例之后執(zhí)行"))
        
          beforeEach(()=>console.info("在本區(qū)塊的每個(gè)測(cè)試用例之前執(zhí)行"))
        
          afterEach(()=>console.info("在本區(qū)塊的每個(gè)測(cè)試用例之后執(zhí)行"))
        
          describe('測(cè)試addNum函數(shù)', ()=> {
            it('兩數(shù)相加結(jié)果為兩個(gè)數(shù)字的和', ()=> {
              assert.equal(addNum(1,2),3)
            })
          })
        })

        小結(jié)

        關(guān)于mock和chai常用的一些玩法都講了,更多的關(guān)于mock的測(cè)試結(jié)果輸出格式,以及skip跳過測(cè)試和only僅測(cè)試當(dāng)前用例等玩法就不講述了。

        相信看了本文案例你已經(jīng)掌握了方法,更多精彩請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

        推薦閱讀:

        Vue指令的使用

        JS閉包的使用

        以上就是Mocha與chai的使用的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


        微信提供公眾平臺(tái)、朋友圈、消息推送等功能,用戶可以通過“搖一搖”、“搜索號(hào)碼”、“附近的人”、掃二維碼方式添加好友和關(guān)注公眾平臺(tái),同時(shí)微信將內(nèi)容分享給好友以及將用戶看到的精彩內(nèi)容分享到微信朋友圈。

        溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 亚洲精品无码永久中文字幕| 美女18毛片免费视频| 中文字幕乱码免费看电影| 亚洲精品无码久久毛片| 亚洲国产日韩a在线播放| 波多野结衣免费在线| 色婷婷六月亚洲婷婷丁香| 十八禁无码免费网站| 久久亚洲国产成人精品性色| 99在线观看视频免费| 亚洲AV无码国产精品色| 青苹果乐园免费高清在线| 亚洲中文无码永久免| 亚洲成AV人片高潮喷水| 免费鲁丝片一级在线观看| 国产成人毛片亚洲精品| 久久亚洲日韩精品一区二区三区 | 国产精品国产午夜免费福利看 | 国产精品亚洲片在线观看不卡 | 99久久综合精品免费| 精品亚洲麻豆1区2区3区| 久久99国产乱子伦精品免费| 亚洲影视自拍揄拍愉拍| 在线观看免费污视频| 久久久久亚洲国产AV麻豆| 亚洲人午夜射精精品日韩| 久久国产精品萌白酱免费| 亚洲免费视频观看| 国产男女性潮高清免费网站| 国产99久久久久久免费看| 亚洲国产精品国自产拍电影| 在线永久免费的视频草莓| 小说区亚洲自拍另类| 亚洲国产精品第一区二区| 日韩精品无码人妻免费视频| 国产免费牲交视频免费播放| 91亚洲视频在线观看| 久久99亚洲综合精品首页| 真人做A免费观看| www在线观看播放免费视频日本| 亚洲小说区图片区|