如何使用 mocha 和 supertest 测试带有 header 参数的 express rest api?

How to test an express rest api with header parameters using mocha and supertest?

我要测试我的休息api。某些路由需要在 http 请求 headers 中为用户身份验证令牌提供一个值。

我在纯 javascript 代码中分离了我有趣的业务逻辑,但我找不到一种方法来测试在 http 请求的 headers 中需要令牌的路由。

欢迎使用任何其他 mocha and/or supertest 的替代品。

使用 supertest,您可以使用 set 关键字设置 header 参数:

api.get('/aroute/')
...
.set('headerParameterName', value)
...

这是使用 supertest 使用令牌授权测试快速服务器 API 的示例:

app.js:

var express = require('express');
var app = express();
var jwt = require('jsonwebtoken');
var expressJwt = require('express-jwt');

var secret = 'my-secret';

app.get('/get-token', function(req, res) {
  var token = jwt.sign({foo: 'bar'}, secret);
  res.send({token: token});
});

app.post(
  '/test',
  expressJwt({
    secret: secret
  }),
  function(req, res) {
    res.send({message: 'You could use the route!'});
  }
);

app.use(function(err, req, res, next) {
  res.status(err.status || 500).send({error: err.message});
});

app.listen(4040, function() {
  console.log('server up and running at 4040 port');
});

module.exports = app;

test.js:

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

describe('Test Route with Token', function() {
  var token = '';

  before(function(done) {
    request(app)
      .get('/get-token')
      .end(function(err, res) {
        var result = JSON.parse(res.text);
        token = result.token;
        done();
      });
  });

  it('should not be able to consume the route /test since no token was sent', function(done) {
    request(app)
      .post('/test')
      .expect(401, done);
  });


  it('should be able to consume the route /test since token valid was sent', function(done) {
    request(app)
      .post('/test')
      .set('Authorization', 'Bearer ' + token)
      .expect(200, done);
  });
});