测试笔记 (一) mocha + should + supertest

阅读2639评论9

一,简介:

1, Mocha 是一个基于node.js和浏览器的集合各种特性的Javascript测试框架,并且可以让异步测试也变的简单和有趣。Mocha的测试是连续的,在正确的测试条件中遇到未捕获的异常时,会给出灵活且准确的报告。
2, Should.js 是一个BBD风格的断言库.
3, SuperTest 是 superagent的孪生库,用于node的模拟HTTP请求的库.

以上都是由大名鼎鼎的TJ Holowaychuk写的.

二,准备工作:

创建并进入我们的项目目录test-example
运行以下命令

npm init -y
npm i express --save
npm i mocha should supertest --save-dev

要根目录下创建项目主文件app.js

'use strict';

var express = require('express');

var app = express();

app.set('port', process.env.PORT || 3000 );

//获取文章API
app.get('/article/:id', function (req, res) {
  //...
});

app.listen(app.get('port'),function () {
	console.log('Express server listening on %d', app.get('port'));
});

module.exports = app;

通过node app.js 可以启动项目.

三, BDD: 兵马未动,测试先行.

在项目目录下新建测试文件 test/index.js 我们期望当请求获取文章API时以JSON格式返回文章的内容.

'use strict';

var app = require('../app.js');
var should = require('should');
var request = require('supertest')(app);

describe('/article/:id', function() {
	before(function () {
		
	});

	it('should return json data',function (done) {
		request.get('/article/10001')
			.set('Accept', 'application/json')
			.expect('Content-Type', /json/)
			.expect(200)
			.end(function (err,res) {
				if (err) return done(err);
				done();
			});
	});

});

为了方便测试,修改package.json文件.增加:

"scripts":{
  "test":"mocha test"
}

然后执行 mocha test
发现测试未能通过,修改api

app.get('/article/:id', function (req, res) {
  return res.status(200).json();
});

测试通过.
修改测试文件,期望只有ID等于10001时才返回200,否则返回404.并且成功返回数据必须包括title和content字段.

'use strict';

var app = require('../app.js');
var should = require('should');
var request = require('supertest')(app);

describe('/article/:id', function() {
	before(function () {
		
	});

	it('should return json data',function (done) {
		request.get('/article/10001')
			.set('Accept', 'application/json')
			.expect('Content-Type', /json/)
			.expect(200)
			.end(function (err,res) {
				if (err) return done(err);
				res.body.title.should.be.ok();
				res.body.content.should.be.String();
				done();
			});
	});

	it('should when id not 10001 return 404',function (done) {
		request.get('/article/10002')
			.set('Accept', 'application/json')
			.expect(404)
			.end(function (err,res) {
				if (err) return done(err);
				done();
			});
	});
});

运行npm test 未能通过测试.修改API使测试通过.

//获取文章
app.get('/article/:id', function (req, res) {
	var aid = req.params.id;
	if(aid === '10001'){
		return res.status(200).json({
			title:"中国世界第一",
			content:"人均也是第一"
		});
	}else{
		return res.status(404).send();
	}
});

本文测试样例下载地址: https://github.com/jackhutu/test-example/tree/mocha-should-supertest

9条评论添加新评论
JackJack2016.3.13 2:17

世界你好.

4419533094419533092016.3.18 1:14

hhhhh

4419533094419533092016.3.18 1:14

bbbb

4419533094419533092016.3.18 1:50

123

无语无语2016.3.29 3:23

11223

A mouseA mouse2016.7.15 4:37

kmbnjn

A mouseA mouse2016.7.15 4:37

jkmnlk

pigchildepigchilde2016.10.25 11:21

245465464

PengCongmdzzPengCongmdzz2018.1.18 7:14

111