91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

前端單元測試框架Mocha怎么用

發布時間:2022-01-10 09:57:23 來源:億速云 閱讀:232 作者:柒染 欄目:網絡安全

本篇文章給大家分享的是有關前端單元測試框架Mocha怎么用,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

那我們如何做到產出高質量代碼呢?單元測試才是正解,俗話說‘跳過單元測試和不仔細過冒煙就交由QA測試的,就是在耍流氓’(這句話是我自己編的);Mocha是針對Javascript的單元測試工具,下面我們就來看看如何使用它

概念

Mocha: Javascript測試框架

chai:斷言庫,需配合Mocha使用

最簡單的用法

步驟一:安裝

假設我們是在已有項目中進行單元測試

安裝Mocha

/*全局安裝*/
$ npm install --global mocha  

/*局部安裝*/
$ npm install --save-dev mocha

安裝chai

/*局部安裝*/
$ npm install --save-dev chai

全局與局部的區別:若是局部安裝,依賴就會寫入package.json的dependencies或devDependencies中,這樣當別人從你的Github上克隆代碼時,就不需要注意‘依賴包全不全啊’?‘還需不要安裝其他依賴啊?’等等這類的問題,因為'npm install'會將所有依賴下載到本地

步驟二:編寫Js源文件與測試文件

源文件

// add.js
1 function add(x, y) {2   return x + y;3 }4 5 module.exports = add;

測試文件

 // add.test.js
 1 var add = require('./add.js'); 2 var expect = require('chai').expect; 3  4 describe('加法函數的測試', function() { 5   it('1 加 1 應該等于 2', function() { 6     expect(add(1, 1)).to.be.equal(2); 7   }); 8   it('1 加 -1 應該等于 0', function() { 9     expect(add(1, -1)).to.be.equal(0);10   });11 });

步驟三:運行測試文件

$ mocha add.test.js

運行截圖:

前端單元測試框架Mocha怎么用

以上就是Mocha最簡單的使用方式,細不細很簡單啊O(∩_∩)O哈哈~,下面我們再看點進階的

進階之路

進階一:describe和it是什么?

describe:"測試組",也稱測試塊,表示我要進行一系列測試,相當于一個group

it:"測試項",也稱測試用例,表示這是"一系列測試"中的一項,相當于item,如何測試?測試邏輯?都是在it的回調函數中實現的

進階二:什么?describe也有"生命周期"?

每個測試塊(describe)有4個周期,分別是:

 1 describe('test', function() { 2   // 在本測試塊的所有測試用例之前執行且僅執行一次 3   before(function() { 4      5   }); 6   // 在本測試塊的所有測試用例之后執行且僅執行一次 7   after(function() { 8      9   });10 11   // 在測試塊的每個測試用例之前執行(有幾個測試用例it,就執行幾次)12   beforeEach(function() {13     14   });15   // 在測試塊的每個測試用例之后執行(同上)16   afterEach(function() {17     18   });19   20   // 測試用例21   it('test item1', function () {22 23   })24 });

進階三:在進階二中周期代碼是ES6風格,需要安裝babel模塊轉碼

這里分兩種情況:1.全局安裝   2.局部安裝

如果是全局方式安裝的babel,那么我們也要使用全局的Mocha來調用babel-core模塊

$ npm install -g babel-core babel-preset-es2015
$ mocha --compilers js:babel-core/register

但如果是局部方式安裝的babel,那么我們就要使用局部的Mocha來調用babel-core模塊

$ npm install --save-dev babel-core babel-preset-es2015
$ ../node_modules/mocha/bin/mocha --compilers js:babel-core/register

為什么呢?因為Mocha是根據自身的路徑來尋找babel模塊的,所以要全局對應全局,局部對應局部

這里少了很重要的一步:在測試之前,需要配置babel轉碼規則,在項目根目錄,記住‘一定要是根目錄’,新建.babelrc文件,這個文件是供babel使用的

// .babelrc{  "presets": [ "es2015" ] //這里制定使用es2015規則轉碼}

進階四:測試還可以是異步的?

異步測試與普通測試有什么不同:測試用例的回調函數中多了一個參數done

 1 var add = require('../src/add.js'); 2 var expect = require('chai').expect; 3  4 describe('加法函數的測試', function() { 5   // 異步測試 6   it('1 加 1 應該等于 2', function(done) { 7     var clock = setTimeout(function () { 8       expect(add(1, 1)).to.be.equal(2); 9       done(); // 通知Mocha測試結束10     },1000);11   });12 13   // 同步測試14   it('1 加 0 應該等于 1', function() {15     expect(add(1, 0)).to.be.equal(1);16   });17 });

異步測試需要注意一點:必須手動調用done,否則該異步測試就會失敗

代碼:

 1 var add = require('../src/add.js'); 2 var expect = require('chai').expect; 3  4 describe('加法函數的測試', function() { 5   // 異步測試 6   it('1 加 1 應該等于 2', function(done) { 7     var clock = setTimeout(function () { 8       expect(add(1, 1)).to.be.equal(2); 9       //done();我們不主動調用done,看看會發生什么?10     },1000);11   });12 13   // 同步測試14   it('1 加 0 應該等于 1', function() {15     expect(add(1, 0)).to.be.equal(1);16   });17 });

前端單元測試框架Mocha怎么用

從運行結果不難看出,測試用例1失敗了,而且Mocha提示我們:如果是異步測試或鉤子,那么一定要確保done方法被調用,否則測試就會失敗,但并不會影響其他用例

那么,異步測試有哪些應用場景呢?那就是測試數據接口,我們可以這樣:

1 it('異步請求測試', function() {2   return fetch('https://api.github.com')3     .then(function(res) {4       return res.json();5     }).then(function(json) {6       expect(json).to.be.an('object'); // 測試接口返回的是否為對象類型的數據,也就是json格式7     });8 });

進階五:如果我們想只執行某個測試用例呢?或者除了某個用例,其他的都執行

Mocha有兩個用例管理api:only和skip

1.如果只想執行某個用例,我們就用only方式調用它:

 1 var add = require('../src/add.js'); 2 var expect = require('chai').expect; 3  4 describe('加法函數的測試', function() { 5   // 一個測試組中不是只能有一個only,可以有多個only方式執行的用例 6   it.only('1 加 1 應該等于 2', function() { 7     expect(add(1, 1)).to.be.equal(2); 8   }); 9 10 11   it.only('1 加 0 應該等于 1', function() {12     expect(add(1, 0)).to.be.equal(1);13   });14 15   // 但如果組內已經有了only,那么非only方式執行的用例就一定不會被執行,切記16   it('1 加 -1 應該等于 0', function() {17     expect(add(1, -1)).to.be.equal(0);18   });19 20 });

前端單元測試框架Mocha怎么用

可以看出,第三個用例并沒有被執行

2.如果想跳過某個用例,我們就用skip方式調用它:

 1 var add = require('../src/add.js'); 2 var expect = require('chai').expect; 3  4 describe('加法函數的測試', function() { 5  6   it('1 加 1 應該等于 2', function() { 7     expect(add(1, 1)).to.be.equal(2); 8   }); 9 10   // 同理,skip方式執行的用例在同一組內也可以有多個11   it.skip('1 加 0 應該等于 1', function() {12     expect(add(1, 0)).to.be.equal(1);13   });14 15 16   it.skip('1 加 -1 應該等于 0', function() {17     expect(add(1, -1)).to.be.equal(0);18   });19 20 });

第2,3個用例被跳過了

以上就是前端單元測試框架Mocha怎么用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金昌市| 石柱| 蓝山县| 宁陕县| 金秀| 凤庆县| 门源| 商南县| 个旧市| 花莲县| 南郑县| 商丘市| 阿合奇县| 三门峡市| 乐平市| 西昌市| 星座| 怀远县| 保山市| 肥西县| 六枝特区| 进贤县| 南昌市| 老河口市| 安仁县| 金堂县| 临泽县| 鲁甸县| 马公市| 吉隆县| 东平县| 姜堰市| 斗六市| 甘孜县| 新密市| 定州市| 湄潭县| 鄂尔多斯市| 金昌市| 南召县| 毕节市|