测试返回next()/ next(“ route”)的快速中间件

托马斯·里德

我创建了此中间件,next()当通过定义路由的唯一参数时,该中间件将返回queryItems

我最近发现node-mocks-http伪造了表达reqres对象。但是,它不是伪造的next我想知道应该怎么做?下面是一个打开next回调并expect在其中定义语句的示例

middleware.hasOnlyQuery = function(queryItems){
  return function(req, res, next){
    if(typeof queryItems == "string") queryItems = [queryItems]
    if(_.hasOnly(req.query, queryItems)) return next()
    return next("route")
  }
}

这是测试。

it("should only have shop query", function(done){
  var req = httpMocks.createRequest({
      method: 'GET',
      query: {
        foo: "bar"
      }
  });
  var res = httpMocks.createResponse()
  var fn = middleware.hasOnlyQuery(["foo"])(req, res, function(err){
    expect(err).to.equal()
    return done()
  })
})

it("should not only have shop query", function(done){
  var req = httpMocks.createRequest({
      method: 'GET',
      query: {
        foo: "bar",
        bar: "foo"
      }
  });
  var res = httpMocks.createResponse()
  var fn = middleware.hasOnlyQuery(["foo"])(req, res, function(err){
    expect(err).to.equal("route")
    return done()
  })
})

这是执行此操作的正确方法吗?有什么方法可以使它变得更简单/更容易,也许将其转换为promise,以便我可以使用chai-as-promise?

注意:_. hasOnly是自定义的下划线mixin。

罗伯特克莱普

我喜欢Sinon进行以下测试:

// first test
...
var res = httpMocks.createResponse()
var spy = sinon.spy();
middleware.hasOnlyQuery(["foo"])(req, res, spy);
expect(spy.calledWithExactly()).to.be.true;

// second test
...
expect(spy.calledWithExactly('route')).to.be.true;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在JEST的快速中间件中测试next()

中间件next()routeHandler

当中间件进入 next() 时如何返回?

Express中间件,next和Promises

不能将next()称为中间件吗?

猫鼬中间件如何工作,next()是什么?

使用 Jest 测试快速中间件

测试快速中间件并捕获错误

Next js:错误中间件返回 res.status 未定义

在Koa中,中间件中的wait next(),return await next(),return next()和next()之间有什么区别?

测试jsonwebtoken身份验证快速中间件

快速表单发布请求处理中间件返回RangeError

NodeJS Express中间件不使用next()就转到下一个

与 app.use(express.static(...)) 相关的 next() 中间件/路由是什么?

将async / await与done()/ next()中间件功能一起使用

Redux中间件中的dispatch和next之间有什么区别?

Express中间件忽略next(new Error())并继续执行代码

用于express.static()的Express中间件无法正确路由并且抛出next()不是函数

Laravel中间件中的'return $ next($ request)'是做什么的?

next() 中间件不适用于令牌身份验证

在 Express 中使用自定义错误中间件时未定义 next

Next.js:没有定制服务器或包装器的中间件

为什么我必须在猫鼬预保存中间件中使用 next()

Laravel中间件的handle()方法如何在另一个中间件中使用'Clousre $ next'调用?

在Express.js中使用next()将变量传递到下一个中间件

使用 Node.js / Express 是否可以从 IIFE 内部执行 next() 错误并推进到错误处理中间件?

如何对调用res.cookie的快速中间件功能进行单元测试

next()到中间Observable

快速中间件