摘要:需求因?yàn)橹暗捻?xiàng)目沒(méi)有涉及到測(cè)試這一塊沒(méi)有完整的測(cè)試體系。最近看了阮一峰老師的測(cè)試框架實(shí)例教程來(lái)總結(jié)一下。小試牛刀具體的教程在阮一峰老師的博客上有介紹,這里就不再贅述。
Mocha
需求
因?yàn)橹暗捻?xiàng)目沒(méi)有涉及到測(cè)試這一塊,沒(méi)有完整的測(cè)試體系。最近看了阮一峰老師的測(cè)試框架 Mocha 實(shí)例教程
來(lái)總結(jié)一下。
小試牛刀
具體的教程在阮一峰老師的博客上有介紹,這里就不再贅述。
以自己的github上的小工具klocation.js做了個(gè)示例:
/** * Created by caozheng on 2016/11/28. */ require("./../KLoction"); var expect = require("chai").expect; (function (win) { var testUrl = "https://github.com/karzanOnline?a=1"; describe("constructor", function () { var testResult = KLocation(testUrl); describe("#output", function () { it("return value is an object", function () { expect(testResult).to.be.an("object") }); it("property url is string", function () { expect(testResult.url).to.be.a("string") }); it("property port is number", function () { expect(testResult.port).to.be.a("number") }); it("property host is string", function () { expect(testResult.host).to.be.a("string") }); it("property protocol is string", function () { expect(testResult.protocol).to.be.a("string") }); it("property pathname is string", function () { expect(testResult.pathname).to.be.a("string") }); }); describe("#method", function () { it("getParam", function () { expect(testResult.getParam()).to.be.deep.equal({a : "1"}) }); it("getProtocol", function () { expect(testResult.getProtocol()).to.be.equal("https:") }); it("getHost", function () { expect(testResult.getHost()).to.be.equal("github.com") }); it("getPort", function () { expect(testResult.getPort()).to.be.empty; }); it("getPathname", function () { expect(testResult.getPathname()).to.be.equal("/karzanOnline") }) }) }) })(this);
在github上還要去https://travis-ci.org注冊(cè)一下,然后通過(guò)配置.travis.yml文件(確定使用的語(yǔ)言和node的版本),如果測(cè)試通過(guò)就會(huì)生成一個(gè)圖標(biāo)
然后把url放到README.md就可以了。
expect(經(jīng)常用到的方法)
// 相等或不相等 expect(4 + 5).to.be.equal(9); expect(4 + 5).to.be.not.equal(10); expect(foo).to.be.deep.equal({ bar: "baz" }); // 布爾值為true expect("everthing").to.be.ok; expect(false).to.not.be.ok; // typeof expect("test").to.be.a("string"); expect({ foo: "bar" }).to.be.an("object"); expect(foo).to.be.an.instanceof(Foo); // include expect([1,2,3]).to.include(2); expect("foobar").to.contain("foo"); expect({ foo: "bar", hello: "universe" }).to.include.keys("foo"); // empty expect([]).to.be.empty; expect("").to.be.empty; expect({}).to.be.empty; // match expect("foobar").to.match(/^foo/);
mochawesome
這里阮一峰老師給的code是(三個(gè)步驟改進(jìn)一下)
$ npm install --save-dev mochawesome $ ../node_modules/.bin/mocha --reporter mochawesome
首先安裝mochawesome必須!但是第二步可以通過(guò)package.json來(lái)設(shè)置,由于node_modules/.bin/目錄會(huì)在運(yùn)行時(shí)加入系統(tǒng)的PATH變量,因此在運(yùn)行npm時(shí),就可以不帶路徑,直接通過(guò)命令來(lái)調(diào)用這些腳本。
根目錄創(chuàng)建test文件(mocha.opts配置項(xiàng)加一下)
放入測(cè)試的腳本
package.json配置scripts
"scripts": { "test": "mocha --reporter mochawesome" },
將會(huì)在同級(jí)目錄生成mochawesome-reports,訪問(wèn)html即可。
異步測(cè)試
var fetch = require ("node-fetch"); var expect = require("chai").expect; it("異步請(qǐng)求應(yīng)該返回一個(gè)對(duì)象", function (done) { return fetch("https://api.github.com") .then(function (res) { return res.json() }).then(function (json) { expect(json).to.be.an("object"); done(); }) })
測(cè)試用例管理
it.only :如果測(cè)試代碼中有only,那么只有帶有only方法的測(cè)試用例會(huì)運(yùn)行。
it.skip :與only相反
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/91147.html
摘要:為什么要寫(xiě)單元測(cè)試減少提高代碼質(zhì)量,保證你的代碼是可測(cè)試的放心重構(gòu)當(dāng)你每個(gè)方法都寫(xiě)了單元測(cè)試的時(shí)候,你每一個(gè)改動(dòng)都會(huì)影響相應(yīng)的單元測(cè)試,這樣你不用費(fèi)盡心思的考慮哪里會(huì)有影響,特別是復(fù)雜項(xiàng)目或非核心功能不易被測(cè)試到,從而導(dǎo)致的產(chǎn)生。 為什么要寫(xiě)單元測(cè)試 減少bug 提高代碼質(zhì)量,保證你的代碼是可測(cè)試的 放心重構(gòu) 當(dāng)你每個(gè)方法都寫(xiě)了單元測(cè)試的時(shí)候,你每一個(gè)改動(dòng)都會(huì)影響相應(yīng)的單元測(cè)試,這...
摘要:?jiǎn)卧獪y(cè)試的首要目的不是為了能夠編寫(xiě)出大覆蓋率的全部通過(guò)的測(cè)試代碼,而是需要從使用者調(diào)用者的角度出發(fā),嘗試函數(shù)邏輯的各種可能性,進(jìn)而輔助性增強(qiáng)代碼質(zhì)量測(cè)試是手段而不是目的。 本文已發(fā)布在稀土掘金 轉(zhuǎn)載請(qǐng)注明原文鏈接:https://github.com/ecmadao/Co... 雖然很多公司有自己的測(cè)試部門,而且前端開(kāi)發(fā)大多不涉及測(cè)試環(huán)節(jié),但鑒于目前前端領(lǐng)域的快速發(fā)展,其涉及面越來(lái)...
摘要:?jiǎn)卧獪y(cè)試上一節(jié)有討論過(guò),單元測(cè)試就是以代碼單元為單位進(jìn)行測(cè)試,代碼單元可以是一個(gè)函數(shù),一個(gè)模塊,或者一個(gè)類。單元測(cè)試是最容易理解也最容易實(shí)現(xiàn)的測(cè)試方式。在寫(xiě)單元測(cè)試的時(shí)候,盡量將你的單元測(cè)試獨(dú)立出來(lái),不要幾個(gè)單元互相引用。 showImg(https://segmentfault.com/img/remote/1460000008823416?w=997&h=350); 本文作者:G...
摘要:?jiǎn)卧獪y(cè)試上一節(jié)有討論過(guò),單元測(cè)試就是以代碼單元為單位進(jìn)行測(cè)試,代碼單元可以是一個(gè)函數(shù),一個(gè)模塊,或者一個(gè)類。單元測(cè)試是最容易理解也最容易實(shí)現(xiàn)的測(cè)試方式。在寫(xiě)單元測(cè)試的時(shí)候,盡量將你的單元測(cè)試獨(dú)立出來(lái),不要幾個(gè)單元互相引用。 showImg(https://segmentfault.com/img/remote/1460000008823416?w=997&h=350); 本文作者:G...
摘要:感覺(jué)不能這樣下去就學(xué)寫(xiě)一下單元測(cè)試,等他更新代碼我都跑一遍確認(rèn)一下,這樣工作安心多了。具體執(zhí)行的測(cè)試用例實(shí)現(xiàn)代碼。測(cè)試工具斷言庫(kù)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)及測(cè)試框架入門學(xué)習(xí) 最近博主工作是和另一枚后端合作,但是經(jīng)常發(fā)現(xiàn)他寫(xiě)的接口出錯(cuò),苦逼連連。感覺(jué)不能這樣下去就學(xué)寫(xiě)一下單元測(cè)試,等他更新代碼我都跑一遍確認(rèn)一下,這樣工作安心多了。 經(jīng)過(guò)博主一番查找,貌似被推薦比較多的有mocha和chai,下面記錄簡(jiǎn)...
摘要:感覺(jué)不能這樣下去就學(xué)寫(xiě)一下單元測(cè)試,等他更新代碼我都跑一遍確認(rèn)一下,這樣工作安心多了。具體執(zhí)行的測(cè)試用例實(shí)現(xiàn)代碼。測(cè)試工具斷言庫(kù)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)及測(cè)試框架入門學(xué)習(xí) 最近博主工作是和另一枚后端合作,但是經(jīng)常發(fā)現(xiàn)他寫(xiě)的接口出錯(cuò),苦逼連連。感覺(jué)不能這樣下去就學(xué)寫(xiě)一下單元測(cè)試,等他更新代碼我都跑一遍確認(rèn)一下,這樣工作安心多了。 經(jīng)過(guò)博主一番查找,貌似被推薦比較多的有mocha和chai,下面記錄簡(jiǎn)...
閱讀 3083·2021-11-24 10:32
閱讀 751·2021-11-24 10:19
閱讀 5515·2021-08-11 11:17
閱讀 1527·2019-08-26 13:31
閱讀 1315·2019-08-23 15:15
閱讀 2336·2019-08-23 14:46
閱讀 2349·2019-08-23 14:07
閱讀 1188·2019-08-23 14:03