Home  >  Article  >  Web Front-end  >  Using Node.js to do Function Test implementation method_javascript skills

Using Node.js to do Function Test implementation method_javascript skills

WBOY
WBOYOriginal
2016-05-16 17:18:531351browse

Info
At last week’s meeting, colleagues said that they are now using java to write function tests, which has produced a lot of redundant code and the entire project has become bloated. Now we urgently need a simple template project to quickly build a function test.

Later I went back and thought about it, why do we have to use java to do function test?

Node.js should be a good choice, and it has natural support for json, so I went back and searched on github, and there was indeed a related project: testosterone, so I came up with this blog.

Server
If you want to demo, you must have a corresponding server to support it.

Here we choose Express as the server.

First we create a server folder and create a new package.json.

Copy code The code is as follows:

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

Next run command

Copy code The code is as follows:

npm install

Express is now installed.

We implement several simple get post methods for experiment

Copy code The code is as follows:

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
After setting up the server, it’s natural to start testing.

The interfaces of this project are very elegantly named and can be directly loaded into the code.

First, test the basic functions

Copy the code The code is as follows:

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'
});

Then do a simple test on the get post of the user simulated above.

Copy code The code is as follows:

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

Next, if you want to use give when then to describe each test case, you can do this:

Copy code The code is as follows:

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
Through the above code, it can be seen that testosterone is indeed much simpler and more elegant than Java's lengthy http header settings.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn