摘要:前言到了開發的后期,測試工作往往是重中之重,但是測試本身又十分繁瑣與復雜。對后端測試的時候難免會發起請求,為我們提供了這樣的功能。測試效果截圖如下
前言
到了開發的后期,測試工作往往是重中之重,但是測試本身又十分繁瑣與復雜。對于使用js的朋友,對于我接下來要講的內容絕對不會陌生,對,就是大名鼎鼎的摩卡!由于為我的好友開發的后端框架Zeta做測試工作,所以開始接觸這一類測試工具和測試流程,就把我的學習經驗分享給大家吧。
mochamocha的使用方法十分簡單,就是兩個語句describe和it
jsdescribe("req.get",function(){ describe("res.json",function(){ }); });
被describe的回調所包裹的是一個測試流程,使用describe可以很好地為測試表明目的和區分層次
jsdescribe("Array.index",function(){ it("should return -1 when not found",function(){ var tmp=[1,2,3]; tmp.indexOf(4).should.equal(-1); }); });
it的第一個參數是個字符串,你可以把它看做是你測試樣例的期望結果,其實沒有什么實際意義,不會對測試樣例的運行有什么影響。
上面的例子是對于同步的,如果有異步回調怎么辦呢?
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是鏈的最后一個步驟,調用done既不會往下執行,done(err)則說明失敗。
chaichai是一個斷言工具,提供了一些比較受歡迎的斷言寫法,這里主要介紹兩個,should和expect。
jsvar should=require("chai").should(); res.text.should.equal("hi,world"); req.path.should.include("users"); foo.should.have.length(3);
從上面的例子大家可以領會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的使用十分人性化,符合自然語言的規律,就不多提了。
supertest對后端測試的時候難免會發起請求,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"). ....
要設置一些東西怎么辦呢?
jsrequest(app). post("/hh"). send({key:val}). set("Accept-laguange","zh-cn"). set("Cookie",["user=suemi","passwd=*******"]). ...
supertest主要使用的就是expect和end了,通過例子,大家也很清楚基本的用法了,對于詳細的API可以參考官網。
完整示例最后給大家帶來一個我自己寫的完整示例。
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(); }); }); });
測試效果截圖如下
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/8698.html
摘要:有鑒于此,本文以未安裝工具軟件的計算機未激活的愛智設備為例,實戰解說零基礎小白的愛智開發過程。愛智設備斷開互聯網也可以運行,但本文中的開發部署等功能無法操作。 【本...
摘要:直接配置的開發環境還是挺麻煩的,這里我總結了一套開發模板,可以在用的時候可以考慮直接這個項目,項目地址以這個項目為基礎模板來開發就行。配置文件是我們配置的閱讀配置文件使我們的代碼檢查配置文件這個文件主要是繼承了官方推薦的代碼風格。 直接配置ts的開發環境還是挺麻煩的,這里我總結了一套開發模板,可以在用的時候可以考慮直接clone這個項目,項目地址https://github.com/f...
摘要:這里我們可以嘗試運行一下命令嘗試能否構建成功,成功的情況下在目錄下會生成的文件。在添加調試代碼打開調試面板在下拉選項中選擇添加配置或者直接創建并打開文件使用了解相關屬性。 webpack 作為目前主流的構建工具,其較快的版本迭代和復雜的配置方式,使得每次開發前不得不規劃相當部分時間來調試。這里將記錄整個環境的搭建過程,為新手提供基礎思路。 就像我在開發vue-sitemap時一樣,構建...
項目開始前,我們先聊一聊關于項目的一些說明。該項目起始于2017年初,當時公司主要技術棧為gulp+angular,鑒于react的火熱的生態,在公司決定研發bss管理系統時選用react開發,目的也是為react native打下基礎,以解決后期公司大前端技術棧的逐步成熟。(當時沒有選擇vue開發的主要原因是weex生態還不夠特別成熟),既然決定換新,項目的構建也跟著一起換,從gulp轉向火熱的...
閱讀 1642·2023-04-25 18:27
閱讀 1393·2021-10-19 11:44
閱讀 570·2021-10-14 09:42
閱讀 2144·2021-10-11 10:59
閱讀 2777·2021-09-24 09:47
閱讀 1727·2019-08-30 14:20
閱讀 1156·2019-08-30 14:08
閱讀 735·2019-08-29 15:15