摘要:前言到了開發(fā)的后期,測(cè)試工作往往是重中之重,但是測(cè)試本身又十分繁瑣與復(fù)雜。對(duì)后端測(cè)試的時(shí)候難免會(huì)發(fā)起請(qǐng)求,為我們提供了這樣的功能。測(cè)試效果截圖如下
前言
到了開發(fā)的后期,測(cè)試工作往往是重中之重,但是測(cè)試本身又十分繁瑣與復(fù)雜。對(duì)于使用js的朋友,對(duì)于我接下來要講的內(nèi)容絕對(duì)不會(huì)陌生,對(duì),就是大名鼎鼎的摩卡!由于為我的好友開發(fā)的后端框架Zeta做測(cè)試工作,所以開始接觸這一類測(cè)試工具和測(cè)試流程,就把我的學(xué)習(xí)經(jīng)驗(yàn)分享給大家吧。
mochamocha的使用方法十分簡(jiǎn)單,就是兩個(gè)語句describe和it
jsdescribe("req.get",function(){ describe("res.json",function(){ }); });
被describe的回調(diào)所包裹的是一個(gè)測(cè)試流程,使用describe可以很好地為測(cè)試表明目的和區(qū)分層次
jsdescribe("Array.index",function(){ it("should return -1 when not found",function(){ var tmp=[1,2,3]; tmp.indexOf(4).should.equal(-1); }); });
it的第一個(gè)參數(shù)是個(gè)字符串,你可以把它看做是你測(cè)試樣例的期望結(jié)果,其實(shí)沒有什么實(shí)際意義,不會(huì)對(duì)測(cè)試樣例的運(yùn)行有什么影響。
上面的例子是對(duì)于同步的,如果有異步回調(diào)怎么辦呢?
jsdescribe("db.save",function(){ it("should save the doc",function(done){ doc.save(function(err,doc){ if(err) done(err); if(!doc) done(err); done(); }); }); });
done是鏈的最后一個(gè)步驟,調(diào)用done既不會(huì)往下執(zhí)行,done(err)則說明失敗。
chaichai是一個(gè)斷言工具,提供了一些比較受歡迎的斷言寫法,這里主要介紹兩個(gè),should和expect。
jsvar should=require("chai").should(); res.text.should.equal("hi,world"); req.path.should.include("users"); foo.should.have.length(3);
從上面的例子大家可以領(lǐng)會(huì)should的寫法了。
jsvar expect=require("chai").expect; expect(foo).to.be.a("string"); expect(foo).to.equal("bar"); expect(foo).to.have.length(3); expect(beverages).to.have.property("tea").with.length(3);
chai的使用十分人性化,符合自然語言的規(guī)律,就不多提了。
supertest對(duì)后端測(cè)試的時(shí)候難免會(huì)發(fā)起請(qǐng)求,supertest為我們提供了這樣的功能。
jsvar request=require("supertest"); request(app). get("/foo"). expect(200). expect("Content-Type","application/json"). end(function(err,res){ if(err) throw err; });
要模擬異步ajax怎么辦呢
js//json上傳 request(app). post("/foo"). send({key:"value"}). expect(200); //表單提交 request(app). post("/foo"). type("form"). send({key:value}); //上傳文件 request(app). post("/foo"). attach("field","filepath"). ....
要設(shè)置一些東西怎么辦呢?
jsrequest(app). post("/hh"). send({key:val}). set("Accept-laguange","zh-cn"). set("Cookie",["user=suemi","passwd=*******"]). ...
supertest主要使用的就是expect和end了,通過例子,大家也很清楚基本的用法了,對(duì)于詳細(xì)的API可以參考官網(wǎng)。
完整示例最后給大家?guī)硪粋€(gè)我自己寫的完整示例。
jsvar Zeta=require("../../"), assert=require("assert"), request=require("supertest"), demo=Zeta.module("demo",[]), should=require("chai").should(); demo.load(); describe("singleHandler",function(done){ it("should get hello",function(){ demo.handler("h1",function($scope){ $scope.res.writeHead(200,{"Content-Type":"text/plain"}); $scope.res.write("hello,world"); $scope.res.end(); }); demo.get("/test","h1"); request(demo.server()) .get("/test") .expect(200) .end(function(err,res){ if(err) throw err; res.text.should.equal("hello,world"); }); }); it("should cover the previous one",function(done){ demo.handler("h1",function($scope){ $scope.res.writeHead(200,{"Content-Type":"text/plain"}); $scope.res.write("hi,world"); $scope.res.end(); }); request(demo.server(true)). get("/test"). expect(200). end(function(err,res){ if(err) done(err); res.text.should.equal("hi,world"); done(); }); }); });
測(cè)試效果截圖如下
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/8698.html
摘要:有鑒于此,本文以未安裝工具軟件的計(jì)算機(jī)未激活的愛智設(shè)備為例,實(shí)戰(zhàn)解說零基礎(chǔ)小白的愛智開發(fā)過程。愛智設(shè)備斷開互聯(lián)網(wǎng)也可以運(yùn)行,但本文中的開發(fā)部署等功能無法操作。 【本...
摘要:直接配置的開發(fā)環(huán)境還是挺麻煩的,這里我總結(jié)了一套開發(fā)模板,可以在用的時(shí)候可以考慮直接這個(gè)項(xiàng)目,項(xiàng)目地址以這個(gè)項(xiàng)目為基礎(chǔ)模板來開發(fā)就行。配置文件是我們配置的閱讀配置文件使我們的代碼檢查配置文件這個(gè)文件主要是繼承了官方推薦的代碼風(fēng)格。 直接配置ts的開發(fā)環(huán)境還是挺麻煩的,這里我總結(jié)了一套開發(fā)模板,可以在用的時(shí)候可以考慮直接clone這個(gè)項(xiàng)目,項(xiàng)目地址https://github.com/f...
摘要:這里我們可以嘗試運(yùn)行一下命令嘗試能否構(gòu)建成功,成功的情況下在目錄下會(huì)生成的文件。在添加調(diào)試代碼打開調(diào)試面板在下拉選項(xiàng)中選擇添加配置或者直接創(chuàng)建并打開文件使用了解相關(guān)屬性。 webpack 作為目前主流的構(gòu)建工具,其較快的版本迭代和復(fù)雜的配置方式,使得每次開發(fā)前不得不規(guī)劃相當(dāng)部分時(shí)間來調(diào)試。這里將記錄整個(gè)環(huán)境的搭建過程,為新手提供基礎(chǔ)思路。 就像我在開發(fā)vue-sitemap時(shí)一樣,構(gòu)建...
項(xiàng)目開始前,我們先聊一聊關(guān)于項(xiàng)目的一些說明。該項(xiàng)目起始于2017年初,當(dāng)時(shí)公司主要技術(shù)棧為gulp+angular,鑒于react的火熱的生態(tài),在公司決定研發(fā)bss管理系統(tǒng)時(shí)選用react開發(fā),目的也是為react native打下基礎(chǔ),以解決后期公司大前端技術(shù)棧的逐步成熟。(當(dāng)時(shí)沒有選擇vue開發(fā)的主要原因是weex生態(tài)還不夠特別成熟),既然決定換新,項(xiàng)目的構(gòu)建也跟著一起換,從gulp轉(zhuǎn)向火熱的...
閱讀 1646·2023-04-25 18:27
閱讀 1399·2021-10-19 11:44
閱讀 575·2021-10-14 09:42
閱讀 2150·2021-10-11 10:59
閱讀 2784·2021-09-24 09:47
閱讀 1731·2019-08-30 14:20
閱讀 1165·2019-08-30 14:08
閱讀 742·2019-08-29 15:15