国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

node測(cè)試基礎(chǔ)

jonh_felix / 2587人閱讀

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

前言

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

mocha

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

describe

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

被describe的回調(diào)所包裹的是一個(gè)測(cè)試流程,使用describe可以很好地為測(cè)試表明目的和區(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è)字符串,你可以把它看做是你測(cè)試樣例的期望結(jié)果,其實(shí)沒(méi)有什么實(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)則說(shuō)明失敗。

chai

chai是一個(gè)斷言工具,提供了一些比較受歡迎的斷言寫(xiě)法,這里主要介紹兩個(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)會(huì)should的寫(xiě)法了。

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的使用十分人性化,符合自然語(yǔ)言的規(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了,通過(guò)例子,大家也很清楚基本的用法了,對(duì)于詳細(xì)的API可以參考官網(wǎng)。

完整示例

最后給大家?guī)?lái)一個(gè)我自己寫(xiě)的完整示例。

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://m.specialneedsforspecialkids.com/yun/8698.html

相關(guān)文章

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

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

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

    摘要:直接配置的開(kāi)發(fā)環(huán)境還是挺麻煩的,這里我總結(jié)了一套開(kāi)發(fā)模板,可以在用的時(shí)候可以考慮直接這個(gè)項(xiàng)目,項(xiàng)目地址以這個(gè)項(xiàng)目為基礎(chǔ)模板來(lái)開(kāi)發(fā)就行。配置文件是我們配置的閱讀配置文件使我們的代碼檢查配置文件這個(gè)文件主要是繼承了官方推薦的代碼風(fēng)格。 直接配置ts的開(kāi)發(fā)環(huán)境還是挺麻煩的,這里我總結(jié)了一套開(kāi)發(fā)模板,可以在用的時(shí)候可以考慮直接clone這個(gè)項(xiàng)目,項(xiàng)目地址https://github.com/f...

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

    摘要:這里我們可以嘗試運(yùn)行一下命令嘗試能否構(gòu)建成功,成功的情況下在目錄下會(huì)生成的文件。在添加調(diào)試代碼打開(kāi)調(diào)試面板在下拉選項(xiàng)中選擇添加配置或者直接創(chuàng)建并打開(kāi)文件使用了解相關(guān)屬性。 webpack 作為目前主流的構(gòu)建工具,其較快的版本迭代和復(fù)雜的配置方式,使得每次開(kāi)發(fā)前不得不規(guī)劃相當(dāng)部分時(shí)間來(lái)調(diào)試。這里將記錄整個(gè)環(huán)境的搭建過(guò)程,為新手提供基礎(chǔ)思路。 就像我在開(kāi)發(fā)vue-sitemap時(shí)一樣,構(gòu)建...

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

    項(xiàng)目開(kāi)始前,我們先聊一聊關(guān)于項(xiàng)目的一些說(shuō)明。該項(xiàng)目起始于2017年初,當(dāng)時(shí)公司主要技術(shù)棧為gulp+angular,鑒于react的火熱的生態(tài),在公司決定研發(fā)bss管理系統(tǒng)時(shí)選用react開(kāi)發(fā),目的也是為react native打下基礎(chǔ),以解決后期公司大前端技術(shù)棧的逐步成熟。(當(dāng)時(shí)沒(méi)有選擇vue開(kāi)發(fā)的主要原因是weex生態(tài)還不夠特別成熟),既然決定換新,項(xiàng)目的構(gòu)建也跟著一起換,從gulp轉(zhuǎn)向火熱的...

    tianhang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<