鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ node項(xiàng)目mocha自動(dòng)化測(cè)試的疑問

node項(xiàng)目mocha自動(dòng)化測(cè)試的疑問

測(cè)試框架:mocha
數(shù)據(jù)庫:mysql和mongodb

疑問1. 如何控制多個(gè)測(cè)試用例的運(yùn)行順序?用例寫多了,A用例把數(shù)據(jù)變成了狀態(tài)1,有些后面的用例基于這個(gè)狀態(tài)1的數(shù)據(jù)進(jìn)行查詢判斷,才能使得后面的用例正常運(yùn)行,可是由于很多異步,用例A可能沒運(yùn)行完,后面的就跑起來了,數(shù)據(jù)都不對(duì)頭,我希望能確保A用例跑完了再跑后面的,就是定義運(yùn)行順序


疑問2. 除了定義順序以外,還能否定義依賴,在不調(diào)整順序的情況下,用例聲明依賴某個(gè)用例運(yùn)行成功才運(yùn)行,否則就skip,類似PHP的PHPUnit的@depends


疑問3. 許多用例對(duì)數(shù)據(jù)庫進(jìn)行了各種增刪改查,在不編寫刪除/更新代碼對(duì)數(shù)據(jù)進(jìn)行恢復(fù)的情況下讓數(shù)據(jù)恢復(fù)。我用PHP開發(fā)的時(shí)候解決方案是這樣的:將一個(gè)定義好的mysql數(shù)據(jù)庫導(dǎo)出sql文件,配置給PHP的測(cè)試框架,該測(cè)試框架每次啟動(dòng)時(shí)會(huì)清空數(shù)據(jù)庫,然后導(dǎo)入這個(gè)sql文件,于是數(shù)據(jù)庫就構(gòu)建成了這個(gè)sql的內(nèi)容,所有測(cè)試代碼都是基于這個(gè)內(nèi)容狀態(tài)進(jìn)行測(cè)試,怎么改都無所謂,反正下次啟動(dòng)的時(shí)候數(shù)據(jù)庫又會(huì)被恢復(fù),我希望node在這方面也有一個(gè)解決方案可以做到這樣,否則的話也只好我自己開發(fā)這樣的自動(dòng)清空數(shù)據(jù)庫和重新導(dǎo)入的模塊了

回答
編輯回答
我不懂

1.
it('test some async function', done => {...})
你可以傳入done函數(shù),當(dāng)異步結(jié)束完最后調(diào)用done,這樣就可以定義運(yùn)行順序了。
async函數(shù)就不用傳入done了,自己用await控制好就行

如果要定義不同文件之間的運(yùn)行順序,比如A要在B之前,只需在B的第一行加上require('./A')即可

2.
這個(gè)可以自己定義變量來控制順序的吧。。或者可以看看mocha的官方文檔

3.
before(() => {...})
在before函數(shù)里定義單測(cè)之前要執(zhí)行的函數(shù),一個(gè)比較好的實(shí)踐方式就是,先刪庫,再跑單測(cè)。
如果要準(zhǔn)備數(shù)據(jù),可以專門寫一個(gè)prepare.js,然后在單測(cè)文件的第一行require('./prepare')即可。

2018年5月14日 15:18