1. 程式人生 > >很好的解釋babel各個模組功能的小介紹

很好的解釋babel各個模組功能的小介紹

作者: 阮一峰

日期: 2015年12月 3日

Mocha(發音"摩卡")誕生於2011年,是現在最流行的JavaScript測試框架之一,在瀏覽器和Node環境都可以使用。

所謂"測試框架",就是執行測試的工具。通過它,可以為JavaScript應用新增測試,從而保證程式碼的質量。

本文全面介紹如何使用Mocha,讓你輕鬆上手。如果你以前對測試一無所知,本文也可以當作JavaScript單元測試入門。值得說明的是,除了Mocha以外,類似的測試框架還有JasmineKarmaTape等,也很值得學習。

一、安裝

我為本文寫了一個示例庫Mocha-demos,請先安裝這個庫。


$ git clone https://github.com/ruanyf/mocha-demos.git

如果你的電腦沒裝Git,可以直接下載zip壓縮包,進行解壓。

然後,進入mocha-demos目錄,安裝依賴(你的電腦必須有Node)。


$ cd mocha-demos
$ npm install

上面程式碼會在目錄內部安裝Mocha,為了操作的方便,請在全面環境也安裝一下Mocha


$ npm install --global mocha

二、測試指令碼的寫法

Mocha的作用是執行測試指令碼,首先必須學會寫測試指令碼。所謂"測試指令碼",就是用來測試原始碼的指令碼。

下面是一個加法模組add.js的程式碼。


// add.js
function add(x, y) {
  return x + y;
}

module.exports = add;

要測試這個加法模組是否正確,就要寫測試指令碼。

通常,測試指令碼與所要測試的原始碼指令碼同名,但是字尾名為.test.js(表示測試)或者.spec.js(表示規格)。比如,add.js的測試指令碼名字就是add.test.js


// add.test.js
var add = require('./add.js');
var expect = require('chai').expect;

describe('加法函式的測試', function() {
  it('1 加 1 應該等於 2', function() {
    expect(add(1, 1)).to.be.equal(2);
  });
});

上面這段程式碼,就是測試指令碼,它可以獨立執行。測試腳本里面應該包括一個或多個describe塊,每個describe塊應該包括一個或多個it塊。

describe塊稱為"測試套件"(test suite),表示一組相關的測試。它是一個函式,第一個引數是測試套件的名稱("加法函式的測試"),第二個引數是一個實際執行的函式。

it塊稱為"測試用例"(test case),表示一個單獨的測試,是測試的最小單位。它也是一個函式,第一個引數是測試用例的名稱("1 加 1 應該等於 2"),第二個引數是一個實際執行的函式。

三、斷言庫的用法

上面的測試腳本里面,有一句斷言。


expect(add(1, 1)).to.be.equal(2);

所謂"斷言",就是判斷原始碼的實際執行結果與預期結果是否一致,如果不一致就丟擲一個錯誤。上面這句斷言的意思是,呼叫add(1, 1),結果應該等於2。

所有的測試用例(it塊)都應該含有一句或多句的斷言。它是編寫測試用例的關鍵。斷言功能由斷言庫來實現,Mocha本身不帶斷言庫,所以必須先引入斷言庫。


var expect = require('chai').expect;

斷言庫有很多種,Mocha並不限制使用哪一種。上面程式碼引入的斷言庫是chai,並且指定使用它的expect斷言風格。

expect斷言的優點是很接近自然語言,下面是一些例子。


// 相等或不相等
expect(4 + 5).to.be.equal(9);
expect(4 + 5).to.be.not.equal(10);
expect(foo).to.be.deep.equal({ bar: 'baz' });

// 布林值為true
expect('everthing').to.be.ok;
expect(false).to.not.be.ok;

// typeof
expect('test').to.be.a('string');
expect({ foo: 'bar' }).to.be.an('object');
expect(foo).to.be.an.instanceof(Foo);

// include
expect([1,2,3]).to.include(2);
expect('foobar').to.contain('foo');
expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');

// empty
expect([]).to.be.empty;
expect('').to.be.empty;
expect({}).to.be.empty;

// match
expect('foobar').to.match(/^foo/);

基本上,expect斷言的寫法都是一樣的。頭部是expect方法,尾部是斷言方法,比如equala/anokmatch等。兩者之間使用toto.be連線。

如果expect斷言不成立,就會丟擲一個錯誤。事實上,只要不丟擲錯誤,測試用例就算通過。


it('1 加 1 應該等於 2', function() {});

上面的這個測試用例,內部沒有任何程式碼,由於沒有丟擲了錯誤,所以還是會通過。

四、Mocha的基本用法

有了測試指令碼以後,就可以用Mocha執行它。請進入demo01子目錄,執行下面的命令。


$ mocha add.test.js

  加法函式的測試
    ✓ 11 應該等於 2

  1 passing (8ms)

上面的執行結果表示,測試指令碼通過了測試,一共只有1個測試用例,耗時是8毫秒。

相關推薦

解釋babel各個模組功能介紹

作者: 阮一峰 日期: 2015年12月 3日 Mocha(發音"摩卡")誕生於2011年,是現在最流行的JavaScript測試框架之一,在瀏覽器和Node環境都可以使用。 所謂"測試框架",就是執行測試的工具。通過它,可以為Jav

Opencv各個模組功能詳細簡介

3.2版本的模組說明:Opencv3.2模組 首先開啟opencv_modules.hpp檔案,可以看到對於各個功能模組的定義如下:  //功能模組和3.1一樣…   /* * ** File generated automatically, do

stm32的LCD螢幕顯示+各個模組功能除錯

從PWM輸出實驗的工程開始,加入其他各種功能。 LCD螢幕顯示: 一、hardware 其中timer是產生脈衝的。 二、hallib FMC是一個介面,控制SDRAM和LCD 三、#include #include "lcd.h"

知乎上看到一篇解釋“快取”--------Cache 和 Buffer 都是快取,主要區別是什麼?

http://blog.csdn.net/tcp_westwood/article/details/79245845 感謝“沈萬馬”先生的知識共享!!! 作者:沈萬馬 連結:https://www.zhihu.com/question/26190832/answer/1462599

系統技術非業餘研究 » nmon(Linux下用的效能監測工具)介紹

The nmon tool is designed for AIX and Linux performance specialists to use for monitoring and analyzing performance data, including: * CPU utiliz

opencv的原始碼的各個模組的作用介紹和如何通過opencv來設定攝像頭的一些引數(為了引數能生效,應當在宣告capture後就馬上設定,各個引數的意義)

CV_CAP_PROP_POS_MSEC 視訊當前點的毫秒值或視訊捕捉的時間戳 CV_CAP_PROP_POS_FRAMES 下次將被捕獲的0基索引的幀 CV_CAP_PROP_POS_AVI_RATIO 視訊檔案的相關位置: 0 - start of the film, 1 - end of the fil

神心情似乎啊難道她不

http 很好 .com 心情 com 神心情似乎很好啊難道她不小神心情似乎很好啊難道她不小神心情似乎很好啊難道她不小神心情似乎很好 http://p.sfacg.com/p/6197487/http://p.sfacg.com/p/6197489/http://p.sfacg.com/p

Snapshot截圖軟件(一個幾百k又用的的截圖工具)

mar png 窗口 軟件 截屏 ffffff 編輯 tor 截圖 Snapshot截圖軟件(一個很小幾百k又很好用的的截圖工具)Snapshotor 是一款免費的截屏工具。軟件功能強大,支持截取窗口或一塊區域,也可以增加箭頭線,多邊形,文本等註釋。非常使用經常需要截圖並編

經典String str = new String("abc")記憶體分配問題,研究下字串到底該怎麼樣初始化,順便解釋下Java的intern()(在文章結尾)

大佬這個部落格很厲害,解決了我一直以來的困惑; Java中以下兩句有什麼區別呢?String str1="abc";  String str2=new String("abc"); Java把記憶體劃分成兩種:一種是棧記憶體,一種是堆記憶體。  在函式中定義的一些基本型別

Git進階--你可能不知道的用Git功能

一、剛提交的程式碼,發現需要微調一下 剛剛最新提交了一段程式碼,然後跟前端說,介面好了。過了2分鐘,前端跟你說,哎,兄弟,那個金額能不能返回整數,不要小數點。 這個時候一般我們通常會修改一下之後,再提交一個版本。那麼又過了2分鐘,前端又跑來說,哎,兄弟,那個日

程式設計師哥哥真的當嗎?

未來屬於程式設計師,所以人人都想當程式設計師。但是並不是每個人都能當好程式設計師。在你做出決定前

.net裡如何的使用cs頁面,js檔案與aspx頁面裡的各個引數相互使用

今天講一下如何很好的操控對於cs頁面與aspx頁面的引數的很好的利用的問題:很多和我一樣開發的碼農在開發的過程中會遇到,一些引數想使用但是不知道怎麼使用的時候,這裡我把我遇到的一些情況和大家分享一下,如果有爭議,可以留言指出,再次先謝謝了。 首先我們都知道,在aspx頁面一

Dubbo :一些你不一定知道但是用的功能

dubbo功能非常完善,很多時候我們不需要重複造輪子,下面列舉一些不一定知道,但是很好用的功能; 直連Provider 在開發及測試環境下,可能需要繞過註冊中心,只測試指定服務提供者,這時候可能需要點對點直連,點對點直連模式,將以服務介面為單位,忽略註冊中心的提供者列表,A 介

資訊熵知乎解釋,感覺,幫助理解決策樹演算法

讓我們說人話!好的數學概念都應該是通俗易懂的。 資訊熵,資訊熵,怎麼看怎麼覺得這個“熵”字不順眼,那就先不看。我們起碼知道這個概念跟資訊有關係。而它又是個數學模型裡面的概念,一般而言是可以量化的。所以,第一個問題來了:資訊是不是可以量化? 起碼直覺上而言是可以的,不然怎麼可能我們覺得有些人說的廢話特別多,“

Android Thread之threadLoop方法——(追IMS原始碼時不知怎麼執行到threadLoop方法的,這篇文章有一個解釋

Android Framework中的執行緒Thread及它的threadLoop方法 在Framework中的Thread普遍的特點就是有一個 threadLoop方法。它到底是怎麼迴圈起來的。 Android中java世界的Thread 先來看看java是怎麼建

IOS 一個的錄製螢幕實現IOS功能

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

一篇公司管理的文章,:一個公司老闆的日常管理,希望能讓創業的朋友學到東西(引用)

1. 小公司如何留住骨幹:2.關於授權3.有的錢不能省5.關於招聘6.老闆儘量唱紅臉7.公司裡的親戚8.當老闆和開車9.按時發工資10.學會說“不”11.不要在公司內部奢望交朋友12.避免當場做決定13.政策的制定14.矬子裡拔將軍15.有些事情越透明越好16.發勞保用品17.財務制度之簽字與憑證18.關於

的微信程式小結

可以把js中的data的資料傳入到wxs中,直接使用就好了。<wxs src="./../tools.wxs" module = "toolJs"/>【可以閉合標籤引入wxs頁面】直接把test.js中的資料當做引數傳到wxs的函式中,呼叫得到boo函式的結果。如:{{toolJs.boo(msg

iOS,側滑(最簡單效果卻的側滑功能實現

很多時候側滑功能都會被用到。下面來介紹一下,很簡單,效果卻很好。 1.先按照圖片新建LeftViewController,MainViewController(當然請先下載ReSideMenu類:http://download.csdn.net/detail/qq_2732

協方差矩陣的幾何解釋--協方差矩陣的特徵值分解部分,解釋了奇異值分解主成分選擇的原因

http://www.360doc.com/content/16/0121/13/13800296_529534763.shtml A geometric interpretation of the covariance matrix http://www.visi