摘要:單元測試這是測試類型的一種,所謂的單元即,由一些函數(shù)組成能完成某項(xiàng)功能的模塊。單元測試的過程想好測試用例動手寫測試查看測試結(jié)果,通過則否則應(yīng)該進(jìn)行測試模式想說一下,測試模式和單元測試的區(qū)別。測試模式包括單元測試通常測試模式有和模式。
有一定水平的js童鞋,應(yīng)該會經(jīng)常看到一些書上,在介紹項(xiàng)目的時候,會不由自主說道測試。 比如,單元測試,函數(shù)測試,或是TDD,BDD等測試模式。
沒錯,這也是我們需要進(jìn)行掌握的。 當(dāng)然,如果你的項(xiàng)目僅僅是寫的幾個demo,而去寫測試的話,這樣會有點(diǎn)浪費(fèi)時間,但是本人非常鼓勵這樣做,因?yàn)槟阍跍y試時,會發(fā)現(xiàn)自己的代碼覆蓋率,在經(jīng)自己重構(gòu)的時候一點(diǎn)一點(diǎn)的變好。 這感覺是非常不一樣的。而且在大項(xiàng)目中,使用測試,無疑是產(chǎn)品和你撕逼是,你用來堵住他嘴的最佳手段。
這是測試類型的一種,所謂的單元即,由一些函數(shù)組成能完成某項(xiàng)功能的模塊。單元測試的目的就是保證你寫的模塊能夠完成一定任務(wù)并且不出現(xiàn)bug. 另外,單元測試,也是單一職責(zé)原則的一個具體體現(xiàn),如果在你的代碼測試過程中,需要require多個模塊時,這說明你測試的主體模塊的耦合性比較高,這也是提醒你進(jìn)行重構(gòu)的flag。
單元測試的過程想好測試用例
動手寫測試
查看測試結(jié)果,通過則Pass,否則應(yīng)該進(jìn)行repeat
測試模式想說一下,測試模式和單元測試的區(qū)別。
測試模式->(包括)單元測試.
通常測試模式有BDD和TDD模式。
TDD全稱為Test-driven development即,測試驅(qū)動開發(fā). 這個可以算是自主測試,用來幫助你寫出好代碼的一個非常好的辦法。 也是上文說到的,當(dāng)自己看到自己的代碼覆蓋率越來越高的時候,心里應(yīng)該是滿滿的自豪感。
通常的測試步驟應(yīng)該是:
先寫測試
再寫代碼
測試
重構(gòu)
通過
而在大部分公司里面,通常使用的是BDD測試。這里先對BDD進(jìn)行講解,后面會將TDD進(jìn)行探索。
同樣BDD的全稱為: Behavior-Driven development。 樸素的說法叫做行為驅(qū)動開發(fā)。 BDD的應(yīng)用場景就是給一些QA工程師使用的,他用他的語言和你進(jìn)行交流,即他會進(jìn)行一些測試用例,然后如果通過則說明,他已經(jīng)信賴你了。
通常BDD測試提供了幾個方法:
describe() {alias: behavior()}
it()
before()
after()
beforeEach()
afterEach()
通過上面幾個方法,說一下BDD測試應(yīng)該了解哪些基本概念.
測試套件
在TDD里面是指的是test suit. 在BDD里面就對應(yīng)describe(),用來對軟件某個方面的描述。
不懂吧~
針對于describe我們具體來說一下吧。 describe接受兩個參數(shù), 一個是字符串,另外一個是函數(shù)。
describe("Action",function(){ //... })
那第一個字符串是開發(fā)者自己寫,那么該怎么寫呢?
很簡單,我們需要明白,我們是要給一個測試套件命名。 即,給一篇文章寫一個title一樣簡單。
比如,我的一個測試套件是想測試一個計數(shù)框架的一些功能。
那我們的describe就可以寫為Counter(或者"計數(shù)",一些你自己覺得合適的title),像這樣:
describe("Counter",function(){ it("it should increase",function(){ //... }) it("it should decrease",function(){ //... }) })
那么,我們起好標(biāo)題之后,該干什么呢?
首先,該空兩格~
接著,就應(yīng)該開始使用測試用例來寫文章的body了。
測試用例
it就是測試用例的weapon, 它和describe相似,接受兩個參數(shù)。 第一個是對測試的描述,第二個就是具體實(shí)現(xiàn)。
describe("Counter",function(){ it("it should increase",function(){ //... }) })
同樣,it里面的內(nèi)容該怎么寫呢?
我想這不是我的任務(wù),你可以去問下你的語文老師(或者英語老師).
其實(shí),你是用describe和it就已經(jīng)可以寫出一篇好文章了。唯一欠缺的就是需要在里面填上一些內(nèi)容。這時候就需要使用到斷言庫來幫你造句了。
市面上流行的斷言庫有3個,分別是assert,expect,should. 如果學(xué)過nodeJS的童鞋應(yīng)該知道NodeJS自帶assert斷言庫。但是對于本人而言,覺得expect比起assert那種傻逼的寫法,看起來還是蠻舒服了。(當(dāng)然,should也有人使用,關(guān)鍵看你的性趣了).
先show show 這3個的風(fēng)格吧。
比如判斷相等的寫法:
//assert assert.equal(cal.result,1); //expect expect(cal.result).to.equal(1); //should cal.result.shoulde.equal(1)
接下來就看自己的喜好挑一種吧。
ok~
還記得BDD提供幾個API嗎? 沒錯,還有before,after,beforeEach,afterEach他們分別是干什么用的呢?
我這里就應(yīng)用,官方mocha的demo.
describe("hooks", function() { before(function() { // runs before all tests in this block }); after(function() { // runs after all tests in this block }); beforeEach(function() { // runs before each test in this block }); afterEach(function() { // runs after each test in this block }); // test cases });
按照摸cha的說法,上面說的這些函數(shù)都是hook. 將測試的狀態(tài)點(diǎn)暴露給你,讓你可以進(jìn)行相關(guān)的操作。 同樣,官方摸cha也舉例說明了他們的用途。 比如在數(shù)據(jù)庫打開的時候,就可以使用beforeEach來進(jìn)行更新。
beforeEach(function(done) { db.clear(function(err) { if (err) return done(err); db.save([tobi, loki, jane], done); }); });
要記住,beforeEach會在當(dāng)前的Block下的所有case之前執(zhí)行,不管你嵌套多少層。
上面的理論鋪墊完了,我們要正式進(jìn)入,測試的節(jié)奏.
首先,我們運(yùn)行的一切測試,都需要有一個環(huán)境支持,那么mocha就是你的環(huán)境。 它應(yīng)該算是前端測試super 流行的一個框架吧(當(dāng)然,還有jasmine,zuul等). 因?yàn)閮?nèi)容豐富,顯示界面友好,所以,用戶也是很多的。
下載mocha環(huán)境:
sude npm install -g mocha
這里執(zhí)行全局下載。因?yàn)椋瑴y試環(huán)境在全局都是有效的,所以這里就直接放在global下了.
配置assertion
這里我們就使用chai就over了,他包括了3種語言風(fēng)格,你自己引用就可以了。
sudo npm install -g chai
OK。接下來,先寫一個hello world 示例吧。
我們按上述步驟一步一步來.
//自己測試的代碼 var Cal = (function(){ var num = { base:0 }; var add = function(){ num.base++; return num.base; } var desc = function(){ --num.base; return num.base; } return { add,desc,num } })(); //ok,現(xiàn)在引用斷言庫chai var expect = require("chai").expect; //寫出測試 describe("Counter",function(){ it("it should increase",function(){ expect(Cal.num.base).to.below(Cal.add()); }) it("it should decrease",function(){ expect(Cal.num.base).to.above(Cal.desc()); }) })
ok,現(xiàn)在可以打開控制臺,切換到你測試文件所在的目錄,比如,我的是在 demo/demo.js
在控制臺輸入命令
mocha demo.js
如果你的屏幕出現(xiàn)如下:(僅限MAC用戶)
說明你的virgin測試已經(jīng)完成了。
今天就到這吧,整體的介紹了BDD的測試,斷言庫,測試框架,后續(xù)會深入介紹斷言庫和測試框架。
ending~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/8713.html
摘要:針對于類型已經(jīng)出啦個方法來判斷在各種庫里,也出現(xiàn)了想等語義判斷。在斷言庫里,類型判斷也是必不可少的一部分。測試用例應(yīng)該會。在下一個測試套件內(nèi),還是依照默認(rèn)值。 前一篇文章,我們已經(jīng)簡單的闡述了BDD,TDD以及mocha測試框架,chai斷言庫. 這里我們將進(jìn)一步深入,比較全部的了解測試的API。前文,我們已經(jīng)知道了,BDD本身可以比擬為文章的骨架,而chai斷言庫就是骨架里面的血管和...
閱讀 2892·2019-08-30 15:55
閱讀 1994·2019-08-30 14:02
閱讀 1232·2019-08-29 15:23
閱讀 1001·2019-08-29 11:27
閱讀 457·2019-08-26 11:43
閱讀 3184·2019-08-26 10:32
閱讀 1249·2019-08-23 14:41
閱讀 3296·2019-08-23 14:41