使用 Node.js 做 Function Test实现方法
使用 Node.js 做 Function Test实现方法
发布时间:2016-12-30 来源:查字典编辑
摘要:Info上周meeting上同事说他们现在在用java写functiontest,产生了很多冗余的代码,整个项目也变得比较臃肿。现在迫切需要...

Info

上周 meeting 上同事说他们现在在用 java 写 function test,产生了很多冗余的代码,整个项目也变得比较臃肿。现在迫切需要个简单的模板项目能快速搭建function test。

后来我回去想了想,为什么我们非得用 java 来做 function test 呢?

Node.js 应该是个不错的选择,并且对 json 有着天然的支持,于是回去在 github 上随手一搜,还果真有相关的项目:testosterone,于是便有了这篇blog.

Server

要做demo,自然要有相应的server来支撑。

在这里我们选用Express作为server。

首先我们建立一个server的文件夹,新建package.json。

复制代码 代码如下:

{

"name": "wine-cellar",

"description": "Wine Cellar Application",

"version": "0.0.1",

"private": true,

"dependencies": {

"express": "3.x"

}

}

接下来run command

复制代码 代码如下:

npm install

这样express就装上了。

我们实现几个简单的 get post 方法来做实验

复制代码 代码如下:

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 架设完毕,自然要开始做测试了。

这个 project 的接口的命名都挺优雅,直接上代码。

首先是测试基本的功能

复制代码 代码如下:

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'

});

然后针对上面模拟的user的get post 做简单的测试。

复制代码 代码如下:

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");

})

接下来,如果你想要针对每个test case 用 give when then 来描述的话,可以这样:

复制代码 代码如下:

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 冗长的 http 头设置等,testosterone确实简单和优雅了不少。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类