如何在 Express 中模拟中间件以跳过单元测试的身份验证?

2024-05-08

我在 Express 中有以下内容

 //index.js

 var service = require('./subscription.service');
 var auth = require('../auth/auth.service');
 var router = express.Router();

 router.post('/sync', auth.isAuthenticated, service.synchronise);

 module.exports = router;

我想重写或模拟 isAuthenticated 以返回此

auth.isAuthenticated = function(req, res, next) { 
  return next(); 
}

这是我的单元测试:

it('it should return a 200 response', function(done) {

  //proxyquire here?

  request(app).post('/subscriptions/sync')
  .set('Authorization','Bearer '+ authToken)
  .send({receipt: newSubscriptionReceipt })
  .expect(200,done);
});

我尝试使用 proxyquire 模拟 index.js - 我想我需要存根路由器? 我也尝试在测试中覆盖

app.use('/subscriptions', require('./api/subscription'));

必须有一种简单的方法来模拟这一点,这样我就不需要验证请求。有任何想法吗?


您可以使用sinon存根isAuthenticated方法,但您应该在引用之前执行此操作auth.isAuthenticated被设置为中间件,所以在您需要之前index.js and app被建造。您很可能希望在beforeEach hook:

var app;
var auth;

beforeEach(function() {
  auth = require('../wherever/auth/auth.service');
  sinon.stub(auth, 'isAuthenticated')
      .callsFake(function(req, res, next) {
          return next();
      });

  // after you can create app:
  app = require('../../wherever/index');
});

afterEach(function() {
  // restore original method
  auth.isAuthenticated.restore();
});

it('it should return a 200 response', function(done) {
  request(app).post('/subscriptions/sync')
  .set('Authorization','Bearer '+ authToken)
  .send({receipt: newSubscriptionReceipt })
  .expect(200,done);
});

请注意,即使之后auth.isAuthenticated已恢复,现有app实例将有存根作为中间件,因此您需要创建另一个app例如,如果您由于某种原因需要获得原始行为。

Update:有一种方法可以改变中间件的行为,而无需每次都重新创建服务器,如中所述另一个SO答案 https://stackoverflow.com/a/58834073/2835868.

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

如何在 Express 中模拟中间件以跳过单元测试的身份验证? 的相关文章

  • Express 函数中的“res”和“req”参数是什么?

    在下面的 Express 函数中 app get user id function req res res send user req params id 什么是req and res 它们代表什么 意味着什么 有什么作用 Thanks r
  • 在 ng 服务命令上找不到构建器 @angular-devkit/build-angular:dev-server 的实现[重复]

    这个问题在这里已经有答案了 我尝试更新以下 Angular CLIthis https www npmjs com package angular cli updating angular cli 但现在我无法运行我的应用程序 当我尝试运行
  • 服务器发现和监控引擎已弃用

    我在 Node js 应用程序中使用 Mongoose 这是我的配置 mongoose connect process env MONGO URI useNewUrlParser true useUnifiedTopology true u
  • Socket.IO - 开放连接是一个问题吗?

    我目前正在与DerbyJS http derbyjs com 因为它促进了干净 干燥的客户端 服务器代码 附带好处 大多数人使用该框架的主要原因 是它使用 Socket IO 来创建实时应用程序 在这种情况下 我不need实时 但这是一个很
  • 如何使用我自己的自定义身份验证服务使用团队机器人对用户进行身份验证?

    我在 azure 上创建了一个机器人 并在机器人注册通道中注册了它 现在 我想使用我自己托管的自定义身份验证服务 例如 https domainname auth 来使用机器人对用户进行身份验证 我不知道该怎么做 我已阅读 bot 框架文档
  • 在节点环境中存根 jQuery.ajax (jQuery 2.x)

    我正在尝试运行一些需要存根的测试jQuery ajax 我正在使用 SinonJS 来做到这一点 它曾经与旧版本的 jQuery 1 x 一起工作得很好 var require jquery var sinon require sinon
  • 如何将 Observables 数组与 RxJS 6.x 和 Node.js 合并?

    出于学习目的 我正在创建一个 Node 应用程序 该应用程序需要从数组中获取 x RxJS 可观察值并将其组合成单个事件流 我想知道事件何时以任何可观察的方式 以任何顺序发生 不是以任何顺序或完全完成 我觉得它应该在一个合并的事件流中 基本
  • Heroku、NodeJs 和 React 问题:SCRIPT5007:无法获取未定义或空引用的属性“应用”

    我猜我对 Polyfill 有一个奇怪的问题 我在我的应用程序中使用了 MERN stack 并推送到了 Heroku 由于某种原因 在我的 Chrome 计算机上我可以查看该网站 但是 在其他计算机上我收到空白页面并在控制台中出现错误 S
  • Node.js - 使用 XHR 进行强大的上传

    我尝试实现一个简单的 XHR 上传到 Node js 通过强大 https github com felixge node formidable 问题是如果我设置 xhr setRequestHeader Content Type mult
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja
  • ExpressJS 将变量传递给 JavaScript

    我对此完全迷失了 我正在使用 NodeJS 获取 JSON 我需要将变量传递到我的页面并让 JavaScript 使用数据 app get test function req res res render testPage myVar My
  • 如何使用 Jade 迭代数组创建 html 表

    我从 Node ExpressJS 框架开始 遇到了这个我无法解决的问题 我正在尝试显示一个包含一些博客文章的表格 是的 一个博客 但我没有完成 这是 Jade 模板代码 div table thead tr th Posts tbody
  • Dialogflow 简单的授权方法

    是否存在将 Dialogflow 代理连接到的简单方法node js代码 当我将此代码与从 Dialogflow 代理的设置页面获取的正确项目 ID 一起使用时 出现以下错误 错误 获取应用程序默认凭据时出现意外错误 无法加载默认凭据 浏览
  • 为 MongoDB 中的对象数组建立索引

    我有一个巨大的电子邮件转储 我正在尝试在 MongoDB 中存储和查询它 有 160 万封电子邮件 每封电子邮件都存储为节点模块 https github com andris9 mailparser它将原始电子邮件解析为漂亮的 Javas
  • mocha.opts 已弃用,如何迁移到 package.json?

    我正在开发一个大型项目 自从上周我更新了摩卡以来 现在我们收到警告 DeprecationWarning 通过 mocha opts 进行的配置已被弃用并且 将从 Mocha 的未来版本中删除 使用 RC 文件或 改为 package js
  • 电子邮件模板中的剪贴板功能

    我想在电子邮件模板中发送优惠券代码 一个小按钮 用于复制剪贴板上输入元素的内容 通过电子邮件模板 我的意思是我想发送一封电子邮件 其中包含优惠券代码 并且电子邮件模板中会有一个按钮 允许我将其复制到剪贴板 这可以做到吗 任何帮助将不胜感激
  • 如何获取从 Express (Node.js) 中的表单传递的数据

    我想获取使用表单从页面传递的数据 并在重定向的页面中使用该数据 我的客户端有这个表格
  • REST API 路由最佳实践

    我想知道当订单是一种资源时 为以下场景创建 REST API 的最佳实践是什么 获取数据库中的所有订单 当然不是实际场景 仅供理解 通过订单ID获取订单 根据订单ID获取单个订单 单个 GET 路由是否可以用于所有这些场景 或者我们应该针对
  • Node.js 上的 Connect 出现“无法 GET /”

    我正在尝试使用以下方式开始提供一些静态网页connect像这样 var connect require connect var nowjs require now var io require socket io var app conne
  • NPM 如何处理版本冲突?

    由于 NPM 版本 3 节点模块和依赖项都安装在同一根级别 但是 如果我安装两个依赖于同一模块的两个不同版本的模块怎么办 例如 如果我安装异步npm i email protected cdn cgi l email protection

随机推荐

  • 将值数组附加到 React JS 中某个状态的当前数组

    我的状态值为 this state emp id 1 name A id 2 name B id 3 name B 我怎样才能添加一个像这样的数组var arr id 4 name D 给国家emp而不删除数组的当前值 我只想将新的值数组附
  • TryXXX 类似带有“out”参数的方法与返回可为空值类型的方法?

    我经常在 C 中看到这样的方法 进行可能会或可能不会给出结果的计算 bool TrySomething SomeType inputData out SomeOtherType result 为什么人们不使用这样的东西呢 Nullable
  • HashMap 无法转换为 java.lang.string

    我正在尝试从列表视图中获取值 列表视图由hashmap类型的数组列表设置 因此 如果我尝试获取字符串中的值 则会出现错误HashMap cannot be cast to java lang string 详细信息1 java packag
  • 不使用修剪方法从字符串中删除空格?

    给定的字符串是 家 甜蜜的家 如果用户输入模式为 0 那么 o p 应该是 home sweet home 如果用户输入模式为 1 那么 o p 应该是 Do this https stackoverflow com questions 5
  • Android Gradle 构建缓慢

    我试图找出为什么我们的 Gradle 构建如此缓慢 目前 每次您在不进行任何更改的情况下进行构建时 构建时间约为 45 秒 这是一个单模块项目 我已经打开了分析 大部分时间都花在了 app dexDebug 我们使用 Gradle 2 8
  • 如何在Python中连接两个整数?

    如何在Python中连接两个整数 例如 给定10 and 20 我想要一个返回值1020 将两者都转换为字符串 连接字符串 然后将结果转换回整数 z int str x str y
  • 从开放的 HTTP 流中读取数据

    我正在尝试使用 NET WebRequest WebResponse 类来访问 Twitter 流 API 此处 http stream twitter com spritzer json 我需要能够打开连接并从打开的连接中增量读取数据 目
  • PHP文件上传错误tmp_name为空

    我的文件上传遇到这个问题 我尝试在检查验证时上传 PDF 文件TMP NAME是空的 当我检查时 FILES document attach error 该值为 1 意味着存在错误 但当我尝试上传其他 PDF 文件时 它已成功上传 为什么其
  • CollapsingToolbarLayout setTitle() 不会更新,除非折叠

    使用新的设计库 我们应该在CollapsingToolbarLayout 不是Toolbar本身 至少在使用折叠工具栏时 但setTitle 仅在以下特定情况下更新标题 当 的时候CollapsingToolbarLayout还没有标题 此
  • 帮助理解 gluLookAt()

    想象一下你站在地上 抬头看着天空中的一个立方体 当你倾斜头部时 立方体就会移动 我试图在 iPhone 上使用 OpenGL ES 来复制这一点 方法是操纵相机的倾斜 同时查看围绕原点绘制的简单 3D 立方体 我正在使用gluLookAt
  • 如何使用 CocoaPods 正确安装 ReactiveCocoa?

    我很新ReactiveCocoa 我尝试安装ReactiveCocoa几天前通过CocoaPods 这是我的podFile platform ios 7 0 pod ReactiveCocoa 使用后pod install我这里有日志文件
  • 一旦组件被销毁,在 initComponent 函数中创建的存储是否会发生内存泄漏,或者这些存储是否会被垃圾收集?

    这是从另一个问题中衍生出来的一个问题 在 ExtJS 4 中具有相同视图并多次存储的最佳实践 https stackoverflow com questions 27333787 best practice to have the same
  • “GTLDriveFile”类型的值没有成员“downloadUrl”

    我正在关注这个tutorial https developers google com drive ios devguide files我正在尝试用 Swift 来做这件事 The file对象没有downloadUrl财产 我不明白为什么
  • 获取Python中匹配字符串的特定模式后出现的数字

    我想获取所有匹配的数字 仅数字示例 0012 22 或包含与其对应的某些文本 示例 RF332 的数字 该数字与提供的字符串列表匹配 代码中的 my list 带有数字的文本的显示格式类似于用一两个空格分隔 提供示例输入文件以供参考 这是输
  • has_many 关系的动态 class_name

    我正在尝试与动态 class name 属性建立 has many 关系 class Category lt ActiveRecord Base has many ads class name gt lambda return self i
  • 如何找到最长的回文子序列(不是它的长度)

    我想找出字符串中最长的回文子序列 我到处都找到了找出子序列长度的算法 并声明该算法也可以扩展以返回子序列 但我没有找到如何实现的 有人能解释一下我怎样才能得到序列吗 既然你提到了链接最长回文子序列 http www geeksforgeek
  • http压缩和url压缩有什么区别?

    查看 Web config 中的节点 我发现它允许 httpCompression 和 urlCompression 元素 两者有什么区别 我只想执行标准 gzip 我应该使用哪一个 url压缩指定what压缩和http压缩表示how进行压
  • Wix:动态添加功能

    我们正在使用 Wix 为我们的软件构建 msi 我们有一些要在目标机器上实现的组件 插件 每个客户端的插件都不同 我们想要做的是创建一个标准构建并修改 msi 包中的功能列表 有没有办法通过自定义操作动态更改功能列表 例如 从自定义操作中读
  • 夏令时规则更改是否使 C 运行时库失效?

    前段时间我整理了一个time基于库 可用于计算某人一年内的相对时间 我当时注意到 为了夏令时 它在两个方向上进行了一小时的轮班 我刚刚想到国会更改了夏令时规则 http aa usno navy mil faq docs daylight
  • 如何在 Express 中模拟中间件以跳过单元测试的身份验证?

    我在 Express 中有以下内容 index js var service require subscription service var auth require auth auth service var router expres