[关闭]
@bornkiller 2014-10-08T22:06:12.000000Z 字数 1650 阅读 3578

HTTP测试----supertest

nodejs

前言

在做nodejs开发中,难免会遇到HTTP相关的测试,一般需要依赖模块supertest或者superagent,supertest依赖后者。

The motivation with this module is to provide a high-level abstraction for testing HTTP。

先从介绍说起,supertest提供HTTP测试抽象接口。本质上来说,是直接向接口发起HTTP请求并解析结果,然后针对结果进行assert

参考文档

中间件测试示例----bodyparse.json

bodyparse的作者测试用例跟我最初的思考有差异,但更简洁。原作者将中间件直接在createserver回调函数中使用,此时的三个参数在实际使用时由express进行控制,此处是显式声明。

  1. function createServer(opts){
  2. var _bodyParser = bodyParser.json(opts)
  3. return http.createServer(function(req, res){
  4. _bodyParser(req, res, function(err){
  5. res.statusCode = err ? (err.status || 500) : 200;
  6. res.end(err ? err.message : JSON.stringify(req.body));
  7. })
  8. })
  9. }
  10. var http = require('http');
  11. var request = require('supertest');
  12. var bodyParser = require('..');
  13. describe('bodyParser.json()', function(){
  14. it('should parse JSON', function(done){
  15. var server = createServer({ limit: '1mb' })
  16. request(server)
  17. .post('/')
  18. .set('Content-Type', 'application/json')
  19. .send('{"user":"tobi"}')
  20. .expect(200, '{"user":"tobi"}', done)
  21. })

私以为,中间件只需要做好输入输出即可,所以我在测试时,依旧引入了express,并在jsonBodyParse路由下调用中间件,然后添加响应函数,返回req.body,觉得这样更适应自己的风格。

  1. var requestAgent = require('supertest');
  2. var should = require('should');
  3. var mocha = require('mocha');
  4. var express = require('express');
  5. var bodyParser = require('body-parser');
  6. var app = express();
  7. app.post('/jsonBodyParse', bodyParser.json(), function(req, res) {
  8. res.send(req.body);
  9. });
  10. var request = requestAgent(app);
  11. describe('reverse flower', function() {
  12. it('post path /jsonBodyParse', function(done) {
  13. request
  14. .post('/jsonBodyParse')
  15. .type('application/json')
  16. .send('{"name":"jason"}')
  17. .expect(200, {"name":"jason"})
  18. .end(function(err) {
  19. done(err);
  20. });
  21. });
  22. });

后记

HTTP测试依赖模块并不复杂,也是刚接触不久,不定时更新此文。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注