如何使用 mocha 和 supertest 测试带有标头参数的 Express Rest api?

2024-01-08

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

我已将有趣的业务逻辑分离为纯 JavaScript 代码,但我找不到方法来测试在 http 请求标头中需要令牌的路由。

欢迎摩卡和/或超级测试的任何其他替代品。


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

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

以下是使用令牌授权测试 Express 服务器 API 的示例supertest :

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);
  });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 mocha 和 supertest 测试带有标头参数的 Express Rest api? 的相关文章

随机推荐

  • window.location 与 just location

    在网络上 我看到大量 JavaScript 程序员在编写window location而不仅仅是location 我很好奇是否有人可以解释原因 window是全局对象 因此没有必要包含 不是吗 我的意思是 你看不到人们写window Mat
  • 允许 Firebase Analytics 域名而不允许其他 Google 服务

    我有一个应用程序 旨在在防火墙后面的内部网络内使用 需要为此应用程序启用 Firebase Analytics 并且网络管理员需要允许 Firebase 端点而不允许所有 Google 服务 到目前为止我才知道我需要允许 firebase
  • 我可以在调用纯虚函数时禁用异常吗?

    我有一些代码看起来像这样 class Writable public virtual void putc const char ch 0 protected virtual Writable class Readable public vi
  • 尝试添加强类型视图在 MVC 项目中找不到任何类

    我有一个非常奇怪的问题 每当我尝试在 ASP NET MVC2 中使用 添加视图 对话框 然后尝试通过从可用类的下拉列表中选择 视图数据类 来 创建强类型视图 时 没有任何类 模型 在我的 MVC 项目中出现了 非常奇怪的部分是我的 MVC
  • 如何在 KeyDown 中确定 Shift + Tab 被按下

    How can I determine in KeyDown that Tab was pressed private void DateTimePicker BirthDate KeyDown object sender KeyEvent
  • 当我们存储长度小于10的字符串时,varchar(10)和varchar(1000)有什么区别吗?

    我理解之间的区别char and varchar但我不确定的确切含义varchar最大长度 当我们存储string长度小于10的有什么区别varchar 10 and varchar 100 我认为这两种情况都使用相同的空间并具有相同的性能
  • 如何在 F# 中连接字符串列表?

    我现在正在尝试这个 但我还没有完全解决方法签名 有人吗 messages 是 seq string 的一个字段 let messageString List reduce messages fun m1 m2 gt m1 m2 Enviro
  • 创建通用循环缓冲区

    鉴于希望从其内容中抽象出循环缓冲区的结构 并从以下代码段开始 由this http en wikipedia org wiki Circular buffer维基百科条目 typedef struct int value ElemType
  • 使用WebFlux的Reactive编程如何处理依赖的外部api调用

    我是响应式编程的新手 我想知道的一件事是 假设我们有一个 api 它在内部调用 3 个其他 api 其中第一个 api 的结果被输入到第二个 api 而第二个 api 的输出被输入到第三个 它不会减少到基于正常单线程的执行吗 如果是的话 那
  • PowerShell InvokeGet 找不到目录属性

    我们需要检索活动目录中有关 终端服务 的信息 为此 我创建了一个在大多数情况下都能正常工作的函数 但是 对于某些用户 我们遇到了问题 代码 Function Get ADTSProfile CmdletBinding Param Param
  • 我们实际上可以将两组多个变量传递到 dplyr 中的 mutate 中吗

    This question https stackoverflow com questions 66174874 using dplyracross with two sets of variables尽管三个答案让我在思考这个问题时产生了
  • 如何在 Rail 2.3.5 中生成 mongoid.yml 配置?

    正如标题所示 如何在 Rail 2 3 5 上生成默认的 mongoid yml 配置文件 我尝试使用 rails generated mongoid config 命令 但它只是生成一个新应用程序 而且 我想在 mongoid 中使用 h
  • 仅使用gunicorn、django 和whitenoise 如何为媒体提供服务?

    我的网站终于可以正常工作了 但在以下情况下无法提供媒体文件debug False我应该怎么办 我经历了地狱般的尝试让它与 nginx 一起工作本教程 https www digitalocean com community tutorial
  • 如何在 Bash 脚本中运行 sudo 命令?

    我想运行以下示例 bash 脚本 该脚本需要 sudo 密码才能执行命令 bin bash kinit needs sudo password vi hello txt 运行上述脚本时 它要求输入密码 我如何在命令本身中传递用户名和密码 或
  • 检查一个数是否能被3整除[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 编写代码来确定一个数字是否能被 3 整除 该函数的输入是single位 0 或 1 如果到目前为止收到的数字是可被 3 整除的数字的二进制表示形式 则
  • 如何动态找出具有自定义属性的所有方法

    我有一个简单的挑战 我动态地需要找出 C 中具有特定属性的所有方法 我将从另一个应用程序动态加载程序集 并且需要找出确切的方法 程序集如下所示 基础 dll Class Base testmethod public void method1
  • Twitter 以编程方式添加照片

    我为 Firefox 制作了裁剪屏幕截图和上传插件 我想带来一个允许用户发布图像的功能 手动 像人类一样 的过程是这样的 打开 twitter com 如果未登录 请告诉用户登录 点击 新推文 就完成了 Attach images by d
  • 比较两个 git 存储库(包括所有分支)

    我有同一个 git 存储库的两个分支 我想检查它们是否完全相同 因此可以安全地删除其中一个而不丢失任何信息 虽然我知道如何比较单个分支 但我想问是否有一种简单的方法来比较所有分支 标签等 最快的方法是添加第二个遥控器并比较输出git ls
  • 如何用 C++ 编写“meta if else if..”?

    我刚刚学习 C 元编程的基础知识 我认为很高兴看到其他人如何解决以下问题 另外 很高兴看到使用 Boost 元编程库的解决方案 因为我认为它们对我来说是黑暗的角落 那么问题来了 是否可以重写得更优雅呢 假设我们有以下结构 template
  • 如何使用 mocha 和 supertest 测试带有标头参数的 Express Rest api?

    我必须测试我的其余 api 某些路由需要用户身份验证令牌的 http 请求标头中的值 我已将有趣的业务逻辑分离为纯 JavaScript 代码 但我找不到方法来测试在 http 请求标头中需要令牌的路由 欢迎摩卡和 或超级测试的任何其他替代