带你入门带你飞Ⅱ 使用Mocha + Chai + SuperTest测试Restful API in node.js
目录
1. 简介
2. 准备开始
3. Restful API测试实战
Example 1 - GET
Example 2 - Post
Example 3 - Put
Example 4 - Delete
4. Troubleshooting
5. 参考文档
经过上一篇文章的介绍,相信你已经对mocha, chai有一定的了解了, 本篇主要讲述如何用supertest来测试nodejs项目中的Restful API, 项目基于express框架。
SuperTest 是 SuperAgent一个扩展, 一个轻量级 HTTP AJAX 请求库.
SuperTest provides high-level abstractions for testing node.js API endpoint responses with easy to understand assertions.
准备开始npm安装命令
npm install supertest
nodejs项目文件目录结构如下
├── config │ └── config.json ├── controllers │ └── dashboard │ └── widgets │ └── index.js ├── models │ └── widgets.js ├── lib │ └── jdbc.js ├── package.json └── test └── controllers └── dashboard └── widgets └── index_IntegrationTest.js
测试代码写在index_IntegrationTest.js这个文件中
Restful API测试实战测试依赖库
var express = require(‘express‘); var kraken = require(‘kraken-js‘); var request = require(‘supertest‘); var chai = require(‘chai‘); var assert = chai.assert;
##转载注明出处:
Example 1 - GETController/dashboard/widgets/index.js
var _widgets = require(‘../../../models/widgets.js‘); module.exports = function(router) { router.get(‘/‘, function(req, res) { _widgets.getWidgets(req.user.id) .then(function(widgets){ return res.json(widgets); }) .catch(function(err){ return res.json ({ code: ‘000-0001‘, message: ‘failed to get widgets:‘+err }); }); }); };
测试代码:
var kraken = require(‘kraken-js‘); var express = require(‘express‘); var request = require(‘supertest‘); var aweb = require(‘acxiom-web‘); var chance = new(require(‘chance‘))(); var chai = require(‘chai‘); var assert = chai.assert; describe(‘/dashboard/widgets‘, function() { var app, mock; before(function(done) { app = express(); app.on(‘start‘, done); app.use(kraken({ basedir: process.cwd(), onconfig: function(config, next) { //some config info next(null, config); } })); mock = app.listen(1337); }); after(function(done) { mock.close(done); }); it(‘get widgets‘, function(done) { request(mock) .get(‘/dashboard/widgets/‘) .set(‘Accept‘, ‘application/json‘) .expect(200) .expect(‘Content-Type‘, ‘application/json; charset=utf-8‘) .end(function(err, res) { if (err) return done(err); assert.isArray(res.body, ‘return widgets object‘); done(); }); }); });
Example 2 - Post被测代码:
router.post(‘/‘, function(req, res) { _widgets.addWidget(req.user.id, req.body.widget) .then(function(widget){ return res.json(widget); }) .catch(function(err){ return res.json ({ code: ‘000-0002‘, message: ‘failed to add widget:‘ + err }); }); });
测试代码:
it(‘add widgets‘, function(done) { var body = { widget: { type: ‘billing‘, color: ‘blue‘, location: { x: ‘1‘, y: ‘5‘ } } }; request(mock) .post(‘/dashboard/widgets/‘) .send(body) .expect(200) .expect(‘Content-Type‘, /json/) .end(function(err, res) { if (err) return done(err); assert.equal(res.body.type, ‘billing‘); assert.equal(res.body.color, ‘blue‘); done(); }); });
##转载注明出处:
Example 3 - Put被测代码
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69203.html