Info
上週 meeting 上同事說他們現在在用 java 寫 function test,產生了很多冗餘的程式碼,整個專案也變得比較臃腫。現在迫切需要個簡單的模板專案能快速建立function test。
後來我回去想了想,為什麼我們非得用 java 來做 function test 呢?
Node.js 應該是個不錯的選擇,並且對 json 有著天然的支持,於是回去在 github 上隨手一搜,還果真有相關的項目:testosterone,於是便有了這篇blog.
Server
要做demo,自然要有對應的server來支撐。
在這裡我們選用Express當server。
首先我們建立一個server的資料夾,新建package.json。
接下來run command
程式碼如下:
這樣express就裝上了。
我們實作幾個簡單的 get post 方法來做實驗
程式碼如下:
var express = require('express')
var express = require('express')
app.use(express.bodyParser());
app.get('/hello', function(req, res) {
res.send("hello world");
});
app.get('/ ', function (req, res) {
setTimeout(function () {
res.end();
res.end();
res.end(); ;
}, 200);
});
app.get('/hi', function (req, res) {
if (req.param('hello') !== undefined) {
res.writeHead(200, {'Contentent -Type': 'text/plain'});
} else {
res.writeHead(500, {'Content-Type': 'text/ plain'});
res.end('use post instead');
}
});
setTimeout(function () {
res.writeHead(200, {'Content-Type': 'text/plain'} );
res.end(req.param('message') || 'message');
}, 100);
});
app.get('/user', function(req, res) {
res.send(
});
app.post('/user/edit', function (req, res) {
setTimeout(function () {
res.send({
),
status:1
});
}, 100);
});
app.listen(3000);
});
app.listen(3000);
testosterone
server 架設完畢,自然要開始做測試了。
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);
})
status: 200
然後針對上面模擬的user的get post 做簡單的測試。
testosterone
.get('/user', function (res) {
var expectRes = [
> ];
assert.equal(res.statusCode, 200);
>
.get('/user/1', function (res) {
assert.equal(res.statusCode, 200);
assert.equal(user.name, "node js");
})
接下來,如果你想要針對每個test case 用 give when then 來描述的話,可以這樣:
'WHEN
function (cb) {
testosterone.get('/user/1', cb(function (res) {
,
描述: "I am node js"
};
assert.equal(res.statusCode, 200);
assert.equal(JSON.stringify(JSON.parse(res.body)) JSON.strcom );
})
.add(
'GIVEN a POST a user info to /user/edit n'
'WHEN find 遠>
function (cb) {
Conclusion
透過以上的程式碼,可以看出,同java 冗長的 http 頭設定等,testosterone確實簡單和優雅了不少。