???? ??? ??? ???? ?????? ?????. ??? ?? ?? ? ????? ??????
Mocha ??
Mocha? ?? ?? JavaScript??? ????? ? ????, ?? ?? ???? ???? ???? ?? ??? ??? ? ????.
Mocha? ?? ? ??
? ????? Mocha ??
npm?install?-g?mocha
???? Mocha? ?????
npm?install?--save-dev?mocha
package.json? ?? ????? ?????.
"scripts":?{ ????"test":?"mocha" }
Usage of Mocha
???? ?? ??? ???? ??? ????? ??? ???????.
??? ?? ?? ?? ??? ??? ??? ????? ??? ???. mocka? ???? ??? ????? ?? js ??? ?????(test ?? ??? ???? ???? test/ ??? ???? ???? ????). ?? ???).
??? index.js? ???? ?????.
/** ?*?加法函數(shù) ?*?@param?{第一個(gè)數(shù)}?a? ?*?@param?{第二個(gè)數(shù)}?b? ?*/ function?addNum(a,b){ ????return?a+b; } module.exports=addNum;
? index.test.js? ??? ?????(???? ??? ??? ???? ???? ?? ???? ??? ?????. ?? ???? ????). :
var?addNum=require('../src/index') describe('測(cè)試index.js',?function()?{ ??describe('測(cè)試addNum函數(shù)',?function()?{ ????it('兩數(shù)相加結(jié)果為兩個(gè)數(shù)字的和',?function()?{ ???????if(addNum(1,2)!==3){ ?????????throw?new?Error("兩數(shù)相加結(jié)果不為兩個(gè)數(shù)字的和"); ???????} ????}); ??}); });
? ??? ??? ?????.
??? ?????? ?? ??? ?? ??? ????? ??, ? ?? ???? ?? ??? it ??? ????? ???.
?? ??? "??? ??"??? ?? ?? ??? ??? ?????. ? ?? ????? ??? ??? ??("testindex.js")?? ? ?? ????? ??? ???? ??? ?????.
It ??? ?? ???? ???? ???? ?? ?? ??? "??? ???"?? ???. ? ?? ????? ??? ??? ??("? ??? ??? ? ??? ???")??, ? ?? ????? ??? ???? ????.
?? ??? addNum ??? ???? ???. ?? ??? ??? ??? ?????
??npm?test? ???? ??? ?? ??? ????
function?addNum(a,b){ ????return?a+b-1; } module.exports=addNum;Run again
npm?test?? ???? ? ??? ??? ????.
????? ???? ??? ????? chai? ?????.
?? ?? ?? ??? ??? ???? ??? ???? ???. ??? ???? ??? ?????.
?? chai? ?????:
npm?install?--save-dev?chai?? ?? chai? ???? ?? index.test.js? ??? ?????.
var?expect?=?require('chai').expect; var?addNum=require('../src/index') describe('測(cè)試index.js',?function()?{ ??describe('測(cè)試addNum函數(shù)',?function()?{ ????it('兩數(shù)相加結(jié)果為兩個(gè)數(shù)字的和',?function()?{ ??????expect(addNum(1,2)).to.be.equal(3); ????}); ??}); });? ??? ???? ?? ?????. ???? ??? ??(equal to)? ??(??)???. ?? .
npm?test? ???? ?? ??? ????.
??? ????? ?? ??? ???? ?? ?? ? ???? ????.
??? Java ? .NET? ??? ? ?? ??? ??? ? ?? ????.
var?assert?=?require('chai').assert; assert.typeOf(foo,?'string'); assert.equal(foo,?'bar'); assert.lengthOf(foo,?3) assert.property(tea,?'flavors'); assert.lengthOf(tea.flavors,?3);??? ??? ??? ????? ???? ??? ???? ?????. Mocha? ?? ???? ??? js? ?????? ??? ??? ? ????.
mocha?test/index.test.js?? ?? js
mocha?test/index.test.js?test/add.test.js??
wildcard? ???? ?? ??????? ?? js ? jsx? ???? ?? ????. ??:
mocha?'test/some/*.@(js|jsx)'Mocha ? ES6 ??? ??? ?? ES6 ??? ???? ?? ??? ES6 ???? ??? ?????.
index.js?
/** ?*?加法函數(shù) ?*?@param?{第一個(gè)數(shù)}?a? ?*?@param?{第二個(gè)數(shù)}?b? ?*/ export?default?(a,b)=>{ ????return?a+b-1; }??? index.test.js?
import?{assert}?from?'chai' import?addNum?from?'../src/index' describe('測(cè)試index.js',()=>?{ ??describe('測(cè)試addNum函數(shù)',?()=>?{ ????it('兩數(shù)相加結(jié)果為兩個(gè)數(shù)字的和',?()=>?{ ??????assert.equal(addNum(1,2),3) ????}) ??}) })??? ?? ??? ?? ??? ? ????. ?? babel:
npm?install?babel-core?babel-preset-es2015?--save-dev? ???? ???. ???? ???? .babelrc ?? ??? ? ??? ????.
{ ??"presets":?[?"es2015"?] }?? ?? package.json? ????? ???? ?????.
"scripts":?{ ??"test":?"mocha?--compilers?js:babel-core/register" },--compilers ????? ??? ????? ?????? ???? ? ?????. mocha /register ??? ??? ? ?? babel-core, .js ??? ???????:
--????? ?? ??? ???? ?????? ???? ????
"scripts":?{ ??"test":?"mocha?--require?babel-core/register" },??? ? ???????.
Mocha測(cè)試用例執(zhí)行的超時(shí)和高亮
Mocha默認(rèn)每個(gè)測(cè)試用例最多執(zhí)行2000毫秒,如果到時(shí)沒(méi)有得到結(jié)果,就報(bào)錯(cuò)。以下命令設(shè)置超時(shí)時(shí)間為5000:
mocha?-t?5000?index.test.js
Mocha默認(rèn)會(huì)高亮顯示超過(guò)75毫秒的測(cè)試用例,以下命令設(shè)置高亮判斷的臨界值:
mocha?-s?1000?index.test.js
Mocha測(cè)試的鉤子
Mocha在describe塊之中,提供測(cè)試用例的四個(gè)鉤子:before()、after()、beforeEach()和afterEach()。它們會(huì)在指定時(shí)間執(zhí)行。
describe('測(cè)試index.js',()=>?{ ??before(()=>console.info("在本區(qū)塊的所有測(cè)試用例之前執(zhí)行")) ??after(()=>console.info("在本區(qū)塊的所有測(cè)試用例之后執(zhí)行")) ??beforeEach(()=>console.info("在本區(qū)塊的每個(gè)測(cè)試用例之前執(zhí)行")) ??afterEach(()=>console.info("在本區(qū)塊的每個(gè)測(cè)試用例之后執(zhí)行")) ??describe('測(cè)試addNum函數(shù)',?()=>?{ ????it('兩數(shù)相加結(jié)果為兩個(gè)數(shù)字的和',?()=>?{ ??????assert.equal(addNum(1,2),3) ????}) ??}) })
小結(jié)
關(guān)于mock和chai常用的一些玩法都講了,更多的關(guān)于mock的測(cè)試結(jié)果輸出格式,以及skip跳過(guò)測(cè)試和only僅測(cè)試當(dāng)前用例等玩法就不講述了。
相信看了本文案例你已經(jīng)掌握了方法,更多精彩請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
推薦閱讀:
? ??? ??? ??? ??? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

??? ??? ???? ?????? ?? ?? ????, ?? ???? ???? ? ???? ??????. ??? ??? ???? ?? ??? ???? ?? P2P ???? ???? ????? ? ????. ?? ???? ??? ??? ???? ??? ?? ???????. 1. ??? ??? ?????? ??? ??? P2P(Peer-to-Peer) ????? ???? ? ???? ?????. ??? ??? ?? ???? ??? ???? ?? ???? ??? ?? ? ????? ??? ? ????. ???? ???? ??? ???? ??

mdf ??, mds ?? ??? ??? ??? ???? ???? ??? ??? ???? ???? ???? ??? ? ?? ?????. ??? ??? ????? ??? ?? ??? ?? ??? ???. ? ????? ???? ?? ??? mdf ? mds ??? ?? ???? ?? ??? ?????. ?? mdf ??? mds ??? ??? ???? ???. mdf? CD/DVD ??? ??? ?????, mds ??? mdf ??? ????? ?????.

foobar2000? ???? ?? ???? ?? ? ?? ????????. ?? ??? ??? ??? ??? ?????. ?? ????? ??? ??? ???? ?? ????? ??? ?? ??? ?? ? ????. ????? ?? ???? ?????. ? ??? ?? ???? ???? ?? ?? ??? ?????. ????? ???? ???? ???? ???? ????. ?? ??? ??? ??? ????, ??? ???? ?? ??? ?????, ??? ??? ??? ??? ???? ?? ?? ????? ?????. ?? ??? ???? ??? ?? ??? ?????. ??? ???? ?? ?? ??? ????? ??? ?? ??? ?? ??????. ??? ?? ????

?? ????: pip ?? ?? ?? ?? ? ????? Python? ??? ??? pip? Python ??? ??? ?? ?? ??? ?????. ??? pip? ???? ???? ??? ? ?? ???? ???? ???? ??? ?? ?????. ?? ????? pip? Python ?? ??? ?? ?? ???? ???? ???????, ??? ??? ?? ??? ?? ? ?? ???? ??? ??? ? ?? ?????. ???? ??? ????? ?? pip ?? ??? ??? ? ????. pip ?? ??? ?????? ?? ??? ??

CrystalDiskMark? ?? ? ??? ??/?? ??? ??? ???? ?? ????? ?? HDD ???? ?????. ???? ?????? CrystalDiskMark ??? crystaldiskmark ???? ???????~ 1. CrystalDiskMark ?? CrystalDiskMark? ??? ?? ????? ??? ???? ????(SSD)? ?? ? ?? ??? ??? ???? ? ?? ???? ??? ?? ??? ?????. ). ??? I/O ??. ?? Windows ?? ?????? ??? ???? ?????? ??? ??? ??? ???? ?? ???? ??? ??? ??? ???? ???? ??? ?? ?????.

??? ???? ????? ??? ?? ??? ??? ???? ? ? ??? ?????. ?? ??? ???? ???? ??? ? ??? Baidu Netdisk? ??? ???? ??, ???? ?? ?? ? ??? ?? ???? ?? ???? ??? ?????. ??? ??? ????, ??? ????, ????? ???? ????, ??? ?? ?? ?? Baidu Cloud Disk? ??? ??? ??? ? ????. ??? ?? ???? Baidu Netdisk ?? ???? ?? ??? ???? ?? ? ???? ? ??????? Baidu Netdisk ? ?? ??? ??? ?????. Baidu ???? ???? ??? ?? ??: 1. ?? ?? Baidu Cloud ?????? ?????? ??? ? ??? ?? ?? ??? ??????.

MetaMask(???? Little Fox Wallet???? ?)? ???? ??? ?? ??? ?? ????????. ?? BTCC? MetaMask ??? ?? ???? ?????. ??? ? MetaMask ??? ???? ??? ????? ??? ???? ??? ??? ? ??? ? ????? 20 USDT ??? ???? ?? ? ????. BTCCMetaMask ?? ??????? MetaMask ?? ? ?? ??, BTCC?? Little Fox ??? ????? ???? ??? ??? ?????. MetaMask ???? ?????? 3?? ? ??? ???? ??? MetaMask Little Fox Wallet? ??? ?? ?? ?? ???? ?? ? ?????. ??? ??? ? ??? ???? ????? ??? ? ????.

NetEase Mailbox? ?? ????? ?? ???? ??? ???, ????? ???? ???? ?? ????? ??? ?? ????. NetEase Mailbox Master? ??? ???? ?? ??? ??? ??? ?????? ??? ??? ? ?? ????? ?? ????? ??? ??? ?? ???? ????. ??? NetEase Mailbox Master? ???? ??? ? ??? ???? ???? ? ???? ???? ??? ??? ???? ??? ?? ????! ??, ??? ?????? NetEase Mailbox Master ?? ???? ?????? ? ????. App Store ?? Baidu Mobile Assistant?? "NetEase Mailbox Master"? ??? ? ??? ?? ?????. ???? ? ??? ???? NetEase ??? ??? ?? ??????. ??? ?????? ??? ????.
