網(wǎng)站推介方案谷歌官方網(wǎng)站登錄入口
Mocha介紹
介紹
- Cypress 底層依賴于很多優(yōu)秀的開(kāi)源測(cè)試框架,其中就有 Mocha
- Mocha 是一個(gè)適用于 Node.js 和瀏覽器的測(cè)試框架,它使得異步測(cè)試變得簡(jiǎn)單
JS 語(yǔ)言帶來(lái)的問(wèn)題
JS 是單線程異步執(zhí)行的,這使得測(cè)試變得復(fù)雜,因?yàn)闊o(wú)法像測(cè)試同步執(zhí)行的代碼那樣,直接判斷函數(shù)的返回值是否符合預(yù)期(因?yàn)榻o函數(shù)賦值時(shí)函數(shù)可能并未執(zhí)行)
如何驗(yàn)證異步函數(shù)的正確性
- 需要測(cè)試框架支持回調(diào),Promise 或者其他方式來(lái)驗(yàn)證異步函數(shù)的正確性
- Mocha 提供了出色的異步支持包括 Promise ,從而使得異步測(cè)試變得簡(jiǎn)單
Cypress 整合 Mocha
Cypress 繼承并擴(kuò)展了 Mocha 對(duì)異步的支持
Mocha 提供了什么
- 多種接口來(lái)定義測(cè)試套件,Hooks,單個(gè)測(cè)試( Individual )
- BDD(Behavior-Driven Development,行為驅(qū)動(dòng)開(kāi)發(fā))
- TDD(Test-Driven Development,測(cè)試驅(qū)動(dòng)開(kāi)發(fā))
- Exports、QUnit、Require
Cypress 采納了 Mocha 的 BDD 語(yǔ)法
- 該語(yǔ)法非常適合集成測(cè)試和單元測(cè)試
- 在 Mocha 中,一個(gè) BDD 風(fēng)格的測(cè)試用例看起來(lái)是這樣的
describe('description',()=>{beforeEach(()=>{cy.log('---- before method ---');})afterEach(()=>{cy.log('---- after method ---');})context('test context',()=>{it('test1',()=>{cy.log('test1');})it('test2',()=>{cy.log('test2');})})
})
常見(jiàn) Mocha 模塊
Cypress 將 Mocha 硬編碼在自己的框架中,所以編寫(xiě)測(cè)試用例都是基于 Mocha 提供的如下基本功能模塊
- describe()
- context()
- it()
- before()
- beforeEach()
- afterEach()
- after()
- .only()
- .skip()
對(duì)于一條可執(zhí)行的測(cè)試用例來(lái)說(shuō),有以下兩個(gè)必要的組成部分
describe()
- 代表測(cè)試套件,里面可以設(shè)定 context() ,也可以包括多個(gè)測(cè)試用例 it() ,還能嵌套子測(cè)試套件
- 一個(gè)測(cè)試套件可以不包括任何鉤子函數(shù)(Hook),但必須包含至少一條測(cè)試用例 it()
it()
代表一條測(cè)試用例
其他模塊
- 除上述兩個(gè)功能模塊外,其他功能模塊對(duì)于一條可執(zhí)行的測(cè)試來(lái)說(shuō),都是可選的
- 例如 context() 是 describe() 的別名,其行為方式是一致的,直接用 context() 代替 describe() 也是可以的哦