node.js - 单元测试快速路由器

标签 node.js unit-testing express mocha.js

我知道这已经讨论过几次了。无论如何,我觉得所有提供的解决方案都不(完全)符合我的要求。我有以下代码:

router.js:
------------------
var Router = function(app, resourceName, controller) {
    //Create
    app.post('/api/' + resourceName, function(req, res) {
        console.log('Incoming request: ' + resourceName + ' (POST)');
        controller.create(req, res);
    });
};

module.exports = Router;

如您所见,这是一个非常“通用”的路由器。它可以像这样在服务器中实例化:

var app = express();
var userController = ...
var userRouter = new Router(app, 'Users', userController);

所以我不必为每个资源编写一个文件,但我只有一个通用路由器。

我想测试我的通用路由器,但我发现了一些问题:

  1. 如何“注入(inject)”应用程序?我可以创建一个 Express 实例 (var app = express();),但我认为模拟会更好(因为这是单元测试,而不是集成测试!)。获得适当模拟的最佳方法是什么?
  2. 我究竟应该测试什么?据我所知,我的路由器本身(没有集成)除了控制台输出(不值得测试)和函数调用(controller.create(req, res); ).我应该如何测试这个函数是否被调用?或者还有什么要测试的吗?

最佳答案

  1. 您可能应该对应用程序进行 stub 实现。

  2. 您要测试的是构造函数在指定路由+HTTP 方法上注册监听器。我建议将 Sinon.js stub 放入您的应用程序 stub 中,然后在您的测试中检查它们是否使用预期参数调用。

关于node.js - 单元测试快速路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28275102/

相关文章:

android - 如果状态代码为 400 并在 android 中进行改造,则在响应错误主体上接收 NULL

node.js - 如何从react native上传图片到nodejs?

Java Mockito : Cannot doReturn child classes?

python - 是否有用于 Python 单元测试的可视化工具?

javascript - 使用 Router 中间件获取 POST 请求

node.js - 无法将express-validator与express 3.x一起使用

java - 无法将我的请求参数发送到bluemix部署的node.js

node.js - 如何使用 nock.js 模拟 Node-Webshot 请求?

python - 在 sqlalchemy select 对象中测试 where 子句

node.js - 缓存来自 Node/Express/Redis 的压缩响应