gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:10:45 25 4
gpt4 key购买 nike

我必须测试我的休息 api。某些路由需要用户身份验证 token 的 http 请求 header 中的值。

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

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

最佳答案

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

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

下面是使用 supertest 测试具有 token 授权的快速服务器 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);
});
});

关于node.js - 如何使用 mocha 和 supertest 测试带有 header 参数的 express rest api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31464230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com