可測(cè)試代碼的幾個(gè)原則:
- 單一職責(zé):邏輯盡可能的單一,分離不同的功能
- 接口抽象:針對(duì)接口進(jìn)行測(cè)試唠亚,具體代碼的變化不會(huì)影響接口測(cè)試
- 層次分離:代碼分層,可以進(jìn)行逐層測(cè)試
測(cè)試
- BDD:行為驅(qū)動(dòng)開(kāi)發(fā),注重測(cè)試邏輯废士,常用的
describe, it, before, after
- TDD:測(cè)試驅(qū)動(dòng)開(kāi)發(fā),注重測(cè)試結(jié)果蝇完,常用的
suite, test, setup, teardown
- mocha默認(rèn)的模式是BDD官硝,要想執(zhí)行TDD的測(cè)試時(shí)需要加上參數(shù)
mocha -u tdd test.js
Mocha和Jasmine對(duì)比
-
Mocha
自身集成度不高(沒(méi)有斷言矗蕊,spy,異步等)經(jīng)常要配合Chai氢架,Sinon
等庫(kù)使用 -
Jasmine
集成度高傻咖,自帶BBD,spy岖研,方便的異步支持(2.0) -
Jasmine
功能齊全卿操,Mocha
靈活自由
兩者功能覆蓋范圍粗略可以表示為:
Jasmine(2.x) === Mocha + Chai + Sinon - mockserver
Mocha
-
Mocha
是一個(gè)JavaScript
的測(cè)試框架,chai
是一個(gè)斷言庫(kù)孙援,兩者應(yīng)該搭配使用 -
Mocha
提供的鉤子包括before(), after(), beforeEach(), afterEach()
可用于測(cè)試的預(yù)處理和后處理等 - demo
describe('save()', function() {
it('should save without error', function(done) {
...
done();
});
});
//描述應(yīng)該能連成一句通順的話(huà)
//在對(duì)數(shù)據(jù)庫(kù)操作的時(shí)候害淤,可以加上done()回調(diào)函數(shù),解決異步問(wèn)題
//一個(gè)it只能調(diào)用一次done,
斷言庫(kù)
- 常用斷言庫(kù):
should.js/expect.js/chai.js/better-assert/assert
- should.js——BDD風(fēng)格斷言庫(kù)
foo.should.be()
bar.should.have()
-
expect.js——BDD風(fēng)格斷言庫(kù)拓售;基于
should.js
簡(jiǎn)化
expect(foo).to.be()
expect(foo).to.eql()
-
chai——BDD/TDD 雙模 窥摄,同時(shí)支持
should / expect / assert
三種風(fēng)格的斷言庫(kù)
assert: assert.equal(something, someting)
should: something.should.equal(something)
expect: expect(something).to.equal(someting)
參考文章推薦:
How to correctly unit test Express server
使用Mocha和Chai來(lái)測(cè)試Node.js應(yīng)用
測(cè)試框架 Mocha 實(shí)例教程
初識(shí) mocha in NodeJS
測(cè)試?yán)鱩ocha
HTTP 服務(wù)器測(cè)試庫(kù) supertest
Mocha官網(wǎng)