Mocha 和 Chai 入門初探

轉載自樓主個人博客 Mocha 和 Chai 入門初探

Chai

在和 jest 作比較的時候, 兩者主要的不同就是 jest 的集成度比較高內置斷言庫, 而 mocha 需要搭配額外的斷言庫, 在此選擇了比較流行的 chai 作為斷言庫.

風格的選擇

其中 chai 又有好幾種斷言風格, 我們經常見到的其實就是 BDD 風格的 should / expect.

其中我較喜歡 should, 因為它可以直接以屬性的方式嵌入所有內置原生對象, 所以可以很方便的以 variable.should.equal(someValue) 的形式來書寫斷言, 和 expect 相比較可以省略一對 () ... 如果是 expect 風格的話, 上述示例代碼等價于 expect(variable).to.equal(someValue). 在一般情況下兩者的使用時幾乎相同的, expect 作為斷言的開始, should 接在想要斷言的變量之后. 但是有一些地方 should 就需要變換一下我上述所說的寫法了.

Should

should 實際上是給所有的對象都擴充了一個 getter 屬性 should, 如果你想在瀏覽器中運行測試的話, should 在 IE 瀏覽器中會有一些問題. 正是因為 should 是擴充了 Object.prototype, 所以如果變量的值為 nullundefined 的時候, 是無法使用 .should.equal() 的形式的, 因為 null, undefined 的原型不是 Object,所以should 不存在. 所以此時應當如下所示使用.

const sould = require('chai').should();...should.not.exist.(variable); // variable 的值不應該是 null 或者 undefined

Mocha

現在我們來看看如何對 mocha 進行配置以及上手的步驟. 我假定在 mocha 中寫測試的時候也同樣需要使用 ES6 語法, 還有一個關注點是如果我在 webpack.config.js 中已經設置了 alias, 那么在寫測試代碼的時候, 我希望導入的文件也可以使用 alias 來保持我路徑的一致性以及與此同時帶來的便利性.

配置

下載依賴

npm install --save-dev mocha chai

接下來只要在項目根目錄下新建文件夾 test, 在里面寫的測試文件以 *.test.js 命名, 接下來在 packag.json 文件中 配置 npm test 命令.

"npm test": "./node_modules/.bin/mocha"

還可以在 test 根目錄下新建一個配置文件 mocha.opts, 其中配置的選項相當于給 mocha 命令加入了命令行參數.

--recursive
--ui bdd

具體的配置請參照文檔 Mocha - USAGE.

之后在終端輸入 npm run test 即可運行測試.

支持 ES6

上述只是配置好了基本的運行環境, 如果需要支持 ES6 的話, 那么還需要兩個簡單的步驟.

npm install --save-dev babel-register

然后修改 mocha.opts

--recursive
--ui bdd
--require babel-register

完成, 現在已經支持 ES6 語法了.

支持 Webpack 的 Alias

如果不需要請跳過此步驟, 需要的推薦一個本人基于一個開源庫修改的 babel 插件 babel-plugin-webpack-alias-resolve.

寫測試

直接上代碼! 有一個對 axios 經過封裝的 ajax 函數, 我現在對其進行測試. 下面是代碼在 Gist 的地址 the test for ajax which based on axios

結束

寫的很少 ... 正在實踐當中, 其實測試上述那個文件的時候我已經踩了一些坑了, 但是寫出來還是不夠多, 等踩多了總結一下踩過的那些.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457344.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457344.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457344.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ios把數據傳遞到另一個頁面_IOS 應用之間的跳轉和數據傳遞詳解

說明:本文介紹app如何打開另一個app,并且傳遞數據。一、簡單說明新建兩個應用,分別為應用A和應用B.實現要求:在appA的頁面中點擊對應的按鈕,能夠打開appB這個應用。1.新建兩個應用,分別為A和B.142354418874108[1].png150002248248…

Libevent初探

Libevent 是一個用C語言編寫的、輕量級的開源高性能網絡庫,主要有以下幾個亮點:事件驅動( event-driven),高性能;輕量級,專注于網絡,不如 ACE 那么臃腫龐大;源代碼相當精煉、易讀&am…

ServerSocketChannel API用法

java.nio.channels 類 ServerSocketChannel java.lang.Objectjava.nio.channels.spi.AbstractInterruptibleChanneljava.nio.channels.SelectableChanneljava.nio.channels.spi.AbstractSelectableChanneljava.nio.channels.ServerSocketChannel所有已實現的接口: C…

jq分頁 不刷新頁面_jQuery無刷新分頁完整實例代碼

本文實例講述了jQuery無刷新分頁實現方法。分享給大家供大家參考,具體如下:這款jQuery分頁示例,是分頁經典形式,兼容性也做的好,網頁上的分頁代碼,分享給大家。運行效果截圖如下:在線演示地址如…

為什么要寫年終總結

2016只剩下不到百分之一的時間了,網上陸續看到各種企業或個人的總結或盤點,公司也必須規定每個員工要做年度工作總結,或許是環境釋然,心里也有無數次要做總結的念頭,尤其是月末年末這種感覺更重,但卻沒靜下…

特別慢_背什么都特別慢,該怎么提高記憶力?

考研是一項全方位的比拼,除了每天進行知識點的復習,還要做題、總結,最后還得進行背誦記憶,其實什么科目都需要背的,就算數學,該記的概念和公式也是要記憶的,因為會做題更快,提高效率…

tiny4412u-boot燒寫及根文件系統制作(不進入終端問題)

http://m.blog.csdn.net/article/details?id51400196(轉) VMware12 環境:ubuntu12.4 開發板:tiny4412 首先燒寫bootloader,我用一個8G的內存卡,現在不說sd卡的制作過程了,網上可以參考。 現在就…

第三章 中間件,3.1 萬億級數據洪峰下的分布式消息引擎(作者:馮嘉、誓嘉、塵央、牟羽)...

3.1 萬億級數據洪峰下的分布式消息引擎 前言 通過簡單回顧阿里中間件(Aliware)消息引擎的發展史,本文開篇于雙11消息引擎面臨的低延遲挑戰,通過經典的應用場景闡述可能會面臨的問題 - 響應慢,雪崩,用戶體驗差,繼而交易…

Linux目錄結構和常用命令

一、Linux目錄結構 你想知道為什么某些程序位于/bin下,或者/sbin,或者/usr/bin,或/usr/sbin目錄下嗎?例如,less命令位于/usr/bin目錄下。為什么沒在/bin中,或/sbin,或/usr/sbin目錄中&#xff1…

掛載nfs文件系統_綜合架構-day38-NFS服務補充

1.如何讓nfs永久掛載-2種方法開機自啟動文件1.vim /etc/rc.d/rc.local需要修改執行權限chmod x /etc/rc.d/rc/localmount -t nfs 172.16.1.31:/upload/ /mnt/2.vim /etc/fstab172.16.1.31:/upload /mnt nfs defaults 0 02.exportfs 加載配置生效,等價于優雅重啟[15:…

A Neural Algorithm of Artistic Style

本系列文章由 yhl_leo 出品,轉載請注明出處。 文章鏈接: http://blog.csdn.net/yhl_leo/article/details/53931536 1. 資源 Paper: A Neural Algorithm of Artistic StyleTensorFlow version in GitHub: anishathalye/neural-styleCaffe version in GitH…

CSS布局奇淫技巧之--各種居中

居中是我們使用css來布局時常遇到的情況。使用css來進行居中時,有時一個屬性就能搞定,有時則需要一定的技巧才能兼容到所有瀏覽器,本文就居中的一些常用方法做個簡單的介紹。 注:本文所講方法除了特別說明外,都是兼容I…

手寫數字識別中多元分類原理_廣告行業中那些趣事系列:從理論到實戰BERT知識蒸餾...

導讀:本文將介紹在廣告行業中自然語言處理和推薦系統實踐。本文主要分享從理論到實戰知識蒸餾,對知識蒸餾感興趣的小伙伴可以一起溝通交流。摘要:本篇主要分享從理論到實戰知識蒸餾。首先講了下為什么要學習知識蒸餾。一切源于業務需求&#…

linux zip/unzip命令

2019獨角獸企業重金招聘Python工程師標準>>> 語  法&#xff1a;zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工 作目錄>][-ll][-n <字 尾字符串>][-t <日 期時間>][-<壓 縮效率>][壓 縮文件][文件...][-i <范本樣式>][-x <范本樣式…

離散事件模擬

1. 離散事件系統模擬 被模擬系統的行為&#xff1a; 可以抽象為一些離散事件的發生&#xff1b;所發生事件可以引發新的事件&#xff08;拓撲序&#xff09;&#xff1b;人們希望通過計算機模擬理解系統行為&#xff0c;評價或設計真實世界中實際的或所需的系統&#xff1b;適用…

epoll邊緣觸發_C++回聲服務器_9-epoll邊緣觸發模式版本服務器

epoll默認情況下是水平觸發模式&#xff0c;這次將epoll設置為邊緣觸發模式來實現服務器&#xff0c;而客戶端直接使用完美回聲服務器的客戶端。服務器代碼#include #include #include #include #include #include #include #include #include const int BUF_SIZE 4;const int…

利用dbstart和dbshut腳本自動啟動和停止數據庫的問題

客戶的兩臺IBM Power 740小型機使用HACMP軟件創建互備關系的數據庫服務器&#xff0c;每臺小型機運行一個數據庫&#xff0c;任何一臺服務器出現故障宕機&#xff0c;另一臺小型機應該立即接管&#xff0c;且要一并接管數據庫&#xff0c;這時在一臺小型機上就運行了兩個數據庫…

在Windows下不使用密碼遠程登陸Linux

在登陸Linux進行管理的時候我們通常會使用用戶名和密碼進行登陸&#xff0c;這樣一來是比較麻煩&#xff0c;二來是不安全&#xff0c;為了解決這個問題&#xff0c;我們可以使用公私鑰 (public keys和private keys)進行認證。簡單來說公鑰存放在服務器上&#xff0c;私鑰存放在…

dto 是只給前端需要的數據嗎_DO、VO、DTO...XXOO,你弄明白了么

技術公眾號&#xff1a;Java In Mind(Java_In_Mind),歡迎關注&#xff01;背景我相信&#xff0c;剛開始學習接觸企業代碼的時候&#xff0c;一定會發現&#xff0c;工程中充斥著各種XO&#xff1a;DO、VO、DTO、DAO&#xff0c;還有各種名詞&#xff1a;POJO&#xff0c;JavaB…

Javascript判斷object還是list/array的類型(包含javascript的數據類型研究)

前提&#xff1a;先研究javascript中的變量有幾種&#xff0c;參考&#xff1a; http://www.w3school.com.cn/js/js_datatypes.asp http://glzaction.iteye.com/blog/1285147 測試1&#xff1a; typeof關鍵字 var obj {test:test}; typeof obj;//輸出object var list [{test:t…