【问题标题】:Node.js - Unit Testing MiddlewareNode.js - 单元测试中间件
【发布时间】:2015-06-29 15:25:39
【问题描述】:

我有一个带有中间件功能的 api,我用它来过滤传入的请求。这些函数检查标头中 token 的存在,然后对数据库进行两次调用,一次检查令牌,一次获取一些信息并将其传递给请求对象,如果第一次调用通话成功。

我正在努力理解如何通过模拟请求对象和数据库调用来对这些函数进行单元测试。

middleware.js

exports.checkToken = function (req, res, next) {
  if (!req.get('token')) {
      return res.status(400).json('Bad request');
  }

  var token = req.get('token'); //get token from the header 

  User.findOne({'token': token}, function(err, user) {
      // skipped error checking or no user found
      Account.findOne({'_id': user.account}, function(err, account) {
          // skipped error checking or no account found
          req.somevalue = account;
          return next();
      });
  });
};

目前我正在使用 mochachaisinon 并且正在考虑以下问题:

  • 使用 sinon.stub() 模拟 User.findOne 和 Account.findOne

  • 不太确定如何处理 req、res 和 next 对象。如何模仿这些?

【问题讨论】:

    标签: node.js unit-testing mocha.js sinon


    【解决方案1】:

    我认为最好的选择是使用超测。

    https://www.npmjs.com/package/supertest

    此包允许在应用程序上运行模拟完整请求循环的测试。

    【讨论】:

    • 我以前使用过这个包,但想知道是否有任何其他方式对中间件进行单元测试,而不是整个端点,因为这将更面向集成测试。
    • 中间件只不过是一个函数。因此,您可以对其应用标准单元测试。请求可以是普通的旧 javascript 对象,仅具有测试结束所需的属性。
    • 我可能会这样做并返回一个 ANS
    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    相关资源
    最近更新 更多