【问题标题】:How to test an express rest api with header parameters using mocha and supertest?如何使用 mocha 和 supertest 测试带有标头参数的 express rest api?
【发布时间】:2015-07-16 20:48:06
【问题描述】:

我必须测试我的 rest api。某些路由需要用户身份验证令牌的 http 请求标头中的值。

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

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

【问题讨论】:

  • “正确测试路线”是什么意思?这些不应该是查询字符串吗?
  • 我不完全确定我理解了这个问题,但你检查过 Postman 吗?您可以测试 API 并将标头设置为您心中的内容。 getpostman.com
  • 我正确更新了我的问题 测试路由 = 测试请求标头中需要令牌的路由

标签: node.js rest mocha.js supertest


【解决方案1】:

使用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);
  });
});

【讨论】:

    猜你喜欢
    • 2015-03-03
    • 1970-01-01
    • 2016-06-05
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    相关资源
    最近更新 更多