成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

node測試基礎(chǔ)

jonh_felix / 2634人閱讀

摘要:前言到了開發(fā)的后期,測試工作往往是重中之重,但是測試本身又十分繁瑣與復(fù)雜。對后端測試的時(shí)候難免會發(fā)起請求,為我們提供了這樣的功能。測試效果截圖如下

前言

到了開發(fā)的后期,測試工作往往是重中之重,但是測試本身又十分繁瑣與復(fù)雜。對于使用js的朋友,對于我接下來要講的內(nèi)容絕對不會陌生,對,就是大名鼎鼎的摩卡!由于為我的好友開發(fā)的后端框架Zeta做測試工作,所以開始接觸這一類測試工具和測試流程,就把我的學(xué)習(xí)經(jīng)驗(yàn)分享給大家吧。

mocha

mocha的使用方法十分簡單,就是兩個(gè)語句describe和it

describe

jsdescribe("req.get",function(){
    describe("res.json",function(){
    });
});

被describe的回調(diào)所包裹的是一個(gè)測試流程,使用describe可以很好地為測試表明目的和區(qū)分層次

it

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è)字符串,你可以把它看做是你測試樣例的期望結(jié)果,其實(shí)沒有什么實(shí)際意義,不會對測試樣例的運(yùn)行有什么影響。
上面的例子是對于同步的,如果有異步回調(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既不會往下執(zhí)行,done(err)則說明失敗。

chai

chai是一個(gè)斷言工具,提供了一些比較受歡迎的斷言寫法,這里主要介紹兩個(gè),should和expect。

should

jsvar should=require("chai").should();
res.text.should.equal("hi,world");
req.path.should.include("users");
foo.should.have.length(3);

從上面的例子大家可以領(lǐng)會should的寫法了。

expect

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

對后端測試的時(shí)候難免會發(fā)起請求,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了,通過例子,大家也很清楚基本的用法了,對于詳細(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();
            });
    });
});

測試效果截圖如下

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/8698.html

相關(guān)文章

  • 2021愛智先行者—(2)零基礎(chǔ)APP開發(fā)實(shí)例

    摘要:有鑒于此,本文以未安裝工具軟件的計(jì)算機(jī)未激活的愛智設(shè)備為例,實(shí)戰(zhàn)解說零基礎(chǔ)小白的愛智開發(fā)過程。愛智設(shè)備斷開互聯(lián)網(wǎng)也可以運(yùn)行,但本文中的開發(fā)部署等功能無法操作。 【本...

    paney129 評論0 收藏0
  • 配置TS + node 的開發(fā)環(huán)境

    摘要:直接配置的開發(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...

    Anshiii 評論0 收藏0
  • 用webpack寫個(gè)現(xiàn)代的JavaScript包

    摘要:這里我們可以嘗試運(yùn)行一下命令嘗試能否構(gòu)建成功,成功的情況下在目錄下會生成的文件。在添加調(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)建...

    yhaolpz 評論0 收藏0
  • webpack工程化集成React技術(shù)棧(一)

    項(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)向火熱的...

    tianhang 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<