javascript - sinon 试图监视 express res 对象

标签 javascript node.js unit-testing express sinon

我正在尝试测试这个简单的 express 中间件功能

function onlyInternal (req, res, next) {
  if (!ReqHelpers.isInternal(req)) {
    return res.status(HttpStatus.FORBIDDEN).send() <-- TRYING TO ASSERT THIS LINE
  }
  next()
}

这是我目前的测试

describe.only('failure', () => {
      let resSpy
      before(() => {
        let res = {
          status: () => {
            return {
              send: () => {}
            }
          }
        }

        resSpy = sinon.spy(res, 'status')
      })

      after(() => {
        sinon.restore()
      })

      it('should call next', () => {
        const result = middleware.onlyInternal(req, resSpy)
        expect(resSpy.called).to.be.true
      })
    })

我收到这个错误:TypeError: res.status is not a function

为什么 res.status 不是函数?对我来说它显然像是一个函数..

最佳答案

sinon.spy返回新创建的 spy ,而不是 res应用了新的 spy 。

所以在你的情况下:resSpy === res.status而不是你所期望的resSpy === res ,那是没有意义的。

换句话说,你仍然应该传递原始的 res给你的中间件:

const result = middleware.onlyInternal(req, res);

关于javascript - sinon 试图监视 express res 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51448072/

相关文章:

javascript - 从没有 canvas 元素的 HTML Canvas ImageData 创建 Base64 数据

javascript - 是否可以检测 IE 何时忽略 xml 文档中的空白文本节点?

node.js - 在编写使用 supertest 的测试时访问 req.session 对象

javascript - 带有回调的 Node Cron 在调用退出后出现 Cannot enqueue Handshake 错误

javascript - 确保对象可以被垃圾收集

ios - 在NSOperation上使用OCMock会导致错误的访问

javascript - 从原型(prototype)中的ajax请求获取高度

javascript - 如何在 html/Javascript 中实现列表容器?

c# - System.Net.Http 无法加载

java - 单元测试 Jersey Restful Services