javascript - 测试返回 next()/next ("route"的快速中间件

标签 javascript unit-testing express mocha.js middleware

我创建了这个中间件,当 queryItems 定义路由的唯一参数时,它将返回 next()

我最近发现node-mocks-http其中 fakes 表示 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-promised?

Note: _.hasOnly is a custom underscore 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;

关于javascript - 测试返回 next()/next ("route"的快速中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31308587/

相关文章:

用于检查互联网连接的 Javascript

javascript - 简单的 ng-include 不起作用

javascript - HTML 表单输入无效,然后 javascript 函数

java - Spring 启动: Unit Test with Cassandra

android - 使用 robolectric 和 mockito 进行单元测试,以在 Android 中进行改造

java - 模拟抽象类并使用 Mockito 注释注入(inject)类?

node.js - token 无效或提供的状态 token 无效

仅在 IE 中,JavaScript 函数未在外部 .js 文件中定义

express - 增加 apollo-server-express 中的 body 限制大小

javascript - 有人可以帮我从我的 Db Sequelize 中删除记录吗?