最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用 Node.js 做 Function Test實(shí)現(xiàn)方法

 更新時(shí)間:2013年10月25日 15:34:12   作者:  
這篇文章介紹了Node.js 做 Function Test實(shí)現(xiàn)方法,有需要的朋友可以參考一下

Info
上周 meeting 上同事說他們現(xiàn)在在用 java 寫 function test,產(chǎn)生了很多冗余的代碼,整個(gè)項(xiàng)目也變得比較臃腫?,F(xiàn)在迫切需要個(gè)簡(jiǎn)單的模板項(xiàng)目能快速搭建function test。

后來我回去想了想,為什么我們非得用 java 來做 function test 呢?

Node.js 應(yīng)該是個(gè)不錯(cuò)的選擇,并且對(duì) json 有著天然的支持,于是回去在 github 上隨手一搜,還果真有相關(guān)的項(xiàng)目:testosterone,于是便有了這篇blog.

Server
要做demo,自然要有相應(yīng)的server來支撐。

在這里我們選用Express作為server。

首先我們建立一個(gè)server的文件夾,新建package.json。

復(fù)制代碼 代碼如下:

{
    "name": "wine-cellar",
    "description": "Wine Cellar Application",
    "version": "0.0.1",
    "private": true,
    "dependencies": {
        "express": "3.x"
    }
}
 

接下來run command

復(fù)制代碼 代碼如下:

npm install

這樣express就裝上了。

我們實(shí)現(xiàn)幾個(gè)簡(jiǎn)單的 get post 方法來做實(shí)驗(yàn)

復(fù)制代碼 代碼如下:

var express = require('express')
  , app = express();

app.use(express.bodyParser());

app.get('/hello', function(req, res) {
    res.send("hello world");
});

app.get('/', function (req, res) {
  setTimeout(function () {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end();
  }, 200);
});

app.get('/hi', function (req, res) {
  if (req.param('hello') !== undefined) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello!');
  } else {
    res.writeHead(500, {'Content-Type': 'text/plain'});
    res.end('use post instead');
  }
});

app.post('/hi', function (req, res) {
  setTimeout(function () {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end(req.param('message') || 'message');
  }, 100);
});


app.get('/user', function(req, res) {
    res.send(
      [
        {name:'jack'},
        {name:'tom'}
      ]
    );
});

app.get('/user/:id', function(req, res) {
    res.send({
        id: 1,
        name: "node js",
        description: "I am node js"
    });
});

app.post('/user/edit', function (req, res) {
  setTimeout(function () {
    res.send({
      id:req.param('id'),
      status:1
    });
  }, 100);
}); 
app.listen(3000);
console.log('Listening on port 3000...');

testosterone
server 架設(shè)完畢,自然要開始做測(cè)試了。

這個(gè) project 的接口的命名都挺優(yōu)雅,直接上代碼。

首先是測(cè)試基本的功能

復(fù)制代碼 代碼如下:

var testosterone = require('testosterone')({port: 3000})
  , assert = testosterone.assert;

testosterone
  .get('/hello',function(res){
    assert.equal(res.statusCode, 200);
  })

  .get('/hi',function(res){
    assert.equal(res.statusCode, 500);
  })

  .post('/hi', {data: {message: 'hola'}}, {
    status: 200
    ,body: 'hola'
  });
 

然后針對(duì)上面模擬的user的get post 做簡(jiǎn)單的測(cè)試。

復(fù)制代碼 代碼如下:

var testosterone = require('testosterone')({port: 3000})
  , assert = testosterone.assert;

testosterone 
  .get('/user', function (res) {
    var expectRes = [
        {name:'jack'},
        {name:'tom'}
    ];

    assert.equal(res.statusCode, 200);
    assert.equal(JSON.stringify(JSON.parse(res.body)),JSON.stringify(expectRes));
  })

  .get('/user/1', function (res) {

    var user = JSON.parse(res.body);

    assert.equal(res.statusCode, 200);
    assert.equal(user.name, "node js");
    assert.equal(user.description,"I am node js");
  })

接下來,如果你想要針對(duì)每個(gè)test case 用 give when then 來描述的話,可以這樣:

復(fù)制代碼 代碼如下:

var testosterone = require('testosterone')({port: 3000, title: 'test user api'})
  , add = testosterone.add
  , assert = testosterone.assert;

testosterone
  .add(
    'GIVEN a user id  to /user/{id}  \n' +
    'WHEN it have response user \n' +
    'THEN it should return user json',

    function (cb) {
      testosterone.get('/user/1', cb(function (res) {
        var expectRes = {
            id: 1,
            name: "node js",
            description: "I am node js"
        };

        assert.equal(res.statusCode, 200);
        assert.equal(JSON.stringify(JSON.parse(res.body)), JSON.stringify(expectRes));
      }));
  })


  .add(
    'GIVEN a POST  a user info to /user/edit \n' +
    'WHEN find modify success \n' +
    'THEN it should resturn status 1',

    function (cb) {
      testosterone.post('/user/edit', {data: {id: 1, name: "change name"}}, cb(function (res) {
        var res = JSON.parse(res.body);
        assert.equal(res.status, 1);
      }));
    }
  )

  .run(function () {
    require('sys').print('done!');
  });

Conclusion
通過以上的代碼,可以看出,同java 冗長(zhǎng)的 http 頭設(shè)置等,testosterone確實(shí)簡(jiǎn)單和優(yōu)雅了不少。

相關(guān)文章

  • JS實(shí)現(xiàn)仿PS的調(diào)色板效果完整實(shí)例

    JS實(shí)現(xiàn)仿PS的調(diào)色板效果完整實(shí)例

    這篇文章主要介紹了JS實(shí)現(xiàn)仿PS的調(diào)色板效果,結(jié)合完整實(shí)例形式分析了javascript通過運(yùn)算與動(dòng)態(tài)操作頁面元素實(shí)現(xiàn)調(diào)色板功能的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • window.print()打印html網(wǎng)頁的兩種方法實(shí)現(xiàn)

    window.print()打印html網(wǎng)頁的兩種方法實(shí)現(xiàn)

    本文主要介紹了window.print()打印html網(wǎng)頁的兩種方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • asp知識(shí)整理筆記3(問答模式)

    asp知識(shí)整理筆記3(問答模式)

    這是關(guān)于asp知識(shí)整理的第二份筆記,只有把最基礎(chǔ)的問題搞清楚了,才能更好的學(xué)習(xí)ASP編程。
    2015-09-09
  • JavaScript彈出新窗口后向父窗口輸出內(nèi)容的方法

    JavaScript彈出新窗口后向父窗口輸出內(nèi)容的方法

    這篇文章主要介紹了JavaScript彈出新窗口后向父窗口輸出內(nèi)容的方法,涉及javascript窗口操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 如何讓微信小程序頁面之間的通信不再變困難

    如何讓微信小程序頁面之間的通信不再變困難

    這篇文章主要給大家介紹了關(guān)于如何讓微信小程序頁面之間的通信不再變困難的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用微信小程序具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • js實(shí)現(xiàn)刪除li標(biāo)簽一行內(nèi)容

    js實(shí)現(xiàn)刪除li標(biāo)簽一行內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)刪除li標(biāo)簽一行內(nèi)容,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 小程序?qū)崿F(xiàn)搜索界面 小程序?qū)崿F(xiàn)推薦搜索列表效果

    小程序?qū)崿F(xiàn)搜索界面 小程序?qū)崿F(xiàn)推薦搜索列表效果

    這篇文章主要為大家詳細(xì)介紹了小程序?qū)崿F(xiàn)搜索界面,小程序?qū)崿F(xiàn)推薦搜索列表效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • JS實(shí)現(xiàn)3D圖片旋轉(zhuǎn)展示效果代碼

    JS實(shí)現(xiàn)3D圖片旋轉(zhuǎn)展示效果代碼

    這篇文章主要介紹了JS實(shí)現(xiàn)3D圖片旋轉(zhuǎn)展示效果代碼,可實(shí)現(xiàn)頁面元素的3D旋轉(zhuǎn)變換效果,涉及JavaScript動(dòng)態(tài)數(shù)學(xué)運(yùn)算的相關(guān)技巧,需要的朋友可以參考下
    2015-09-09
  • javascript判斷firebug是否開啟的方法

    javascript判斷firebug是否開啟的方法

    這篇文章主要介紹了javascript判斷firebug是否開啟的方法,結(jié)合實(shí)例形式分析了javascript基于console控制臺(tái)方法判斷firebug開啟狀態(tài)的相關(guān)操作技巧,需要的朋友可以參考下
    2016-11-11
  • javascript 獲取圖片尺寸及放大圖片

    javascript 獲取圖片尺寸及放大圖片

    獲取圖片尺寸(不設(shè)置寬高)及放大圖片:利用了IE的私有屬性防止圖片放大失真嚴(yán)重!感興趣的朋友可以參考下
    2013-09-09

最新評(píng)論

会东县| 项城市| 宜宾市| 山阴县| 搜索| 乌什县| 土默特右旗| 尤溪县| 临清市| 化德县| 龙州县| 平泉县| 仁怀市| 石林| 岫岩| 洮南市| 喜德县| 青河县| 嘉祥县| 临桂县| 文化| 高唐县| 鄯善县| 新泰市| 巴东县| 宁明县| 新宁县| 常宁市| 平武县| 新郑市| 石台县| 凌源市| 台湾省| 肥乡县| 临洮县| 太仓市| 平塘县| 云霄县| 玛多县| 光泽县| 广河县|