Mocha 和 Chai 入门初探
轉(zhuǎn)載自樓主個(gè)人博客 Mocha 和 Chai 入門(mén)初探
Chai
在和 jest 作比較的時(shí)候, 兩者主要的不同就是 jest 的集成度比較高內(nèi)置斷言庫(kù), 而 mocha 需要搭配額外的斷言庫(kù), 在此選擇了比較流行的 chai 作為斷言庫(kù).
風(fēng)格的選擇
其中 chai 又有好幾種斷言風(fēng)格, 我們經(jīng)常見(jiàn)到的其實(shí)就是 BDD 風(fēng)格的 should / expect.
其中我較喜歡 should, 因?yàn)樗梢灾苯右詫傩缘姆绞角度胨袃?nèi)置原生對(duì)象, 所以可以很方便的以 variable.should.equal(someValue) 的形式來(lái)書(shū)寫(xiě)斷言, 和 expect 相比較可以省略一對(duì) () ... 如果是 expect 風(fēng)格的話, 上述示例代碼等價(jià)于 expect(variable).to.equal(someValue). 在一般情況下兩者的使用時(shí)幾乎相同的, expect 作為斷言的開(kāi)始, should 接在想要斷言的變量之后. 但是有一些地方 should 就需要變換一下我上述所說(shuō)的寫(xiě)法了.
Should
should 實(shí)際上是給所有的對(duì)象都擴(kuò)充了一個(gè) getter 屬性 should, 如果你想在瀏覽器中運(yùn)行測(cè)試的話, should 在 IE 瀏覽器中會(huì)有一些問(wèn)題. 正是因?yàn)?should 是擴(kuò)充了 Object.prototype, 所以如果變量的值為 null 或 undefined 的時(shí)候, 是無(wú)法使用 .should.equal() 的形式的, 因?yàn)?null, undefined 的原型不是 Object,所以should 不存在. 所以此時(shí)應(yīng)當(dāng)如下所示使用.
const sould = require('chai').should();...should.not.exist.(variable); // variable 的值不應(yīng)該是 null 或者 undefinedMocha
現(xiàn)在我們來(lái)看看如何對(duì) mocha 進(jìn)行配置以及上手的步驟. 我假定在 mocha 中寫(xiě)測(cè)試的時(shí)候也同樣需要使用 ES6 語(yǔ)法, 還有一個(gè)關(guān)注點(diǎn)是如果我在 webpack.config.js 中已經(jīng)設(shè)置了 alias, 那么在寫(xiě)測(cè)試代碼的時(shí)候, 我希望導(dǎo)入的文件也可以使用 alias 來(lái)保持我路徑的一致性以及與此同時(shí)帶來(lái)的便利性.
配置
下載依賴
npm install --save-dev mocha chai接下來(lái)只要在項(xiàng)目根目錄下新建文件夾 test, 在里面寫(xiě)的測(cè)試文件以 *.test.js 命名, 接下來(lái)在 packag.json 文件中 配置 npm test 命令.
"npm test": "./node_modules/.bin/mocha"還可以在 test 根目錄下新建一個(gè)配置文件 mocha.opts, 其中配置的選項(xiàng)相當(dāng)于給 mocha 命令加入了命令行參數(shù).
--recursive --ui bdd具體的配置請(qǐng)參照文檔 Mocha - USAGE.
之后在終端輸入 npm run test 即可運(yùn)行測(cè)試.
支持 ES6
上述只是配置好了基本的運(yùn)行環(huán)境, 如果需要支持 ES6 的話, 那么還需要兩個(gè)簡(jiǎn)單的步驟.
npm install --save-dev babel-register然后修改 mocha.opts
--recursive --ui bdd --require babel-register完成, 現(xiàn)在已經(jīng)支持 ES6 語(yǔ)法了.
支持 Webpack 的 Alias
如果不需要請(qǐng)?zhí)^(guò)此步驟, 需要的推薦一個(gè)本人基于一個(gè)開(kāi)源庫(kù)修改的 babel 插件 babel-plugin-webpack-alias-resolve.
寫(xiě)測(cè)試
直接上代碼! 有一個(gè)對(duì) axios 經(jīng)過(guò)封裝的 ajax 函數(shù), 我現(xiàn)在對(duì)其進(jìn)行測(cè)試. 下面是代碼在 Gist 的地址 the test for ajax which based on axios
結(jié)束
寫(xiě)的很少 ... 正在實(shí)踐當(dāng)中, 其實(shí)測(cè)試上述那個(gè)文件的時(shí)候我已經(jīng)踩了一些坑了, 但是寫(xiě)出來(lái)還是不夠多, 等踩多了總結(jié)一下踩過(guò)的那些坑.
總結(jié)
以上是生活随笔為你收集整理的Mocha 和 Chai 入门初探的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python如何控制运行时间_pytho
- 下一篇: 21OGNL与ValueStack(VS