我知道这已经讨论过几次了。无论如何,我觉得所有提供的解决方案都不(完全)符合我的要求。我有以下代码:
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);
所以我不必为每个资源编写一个文件,但我只有一个通用路由器。
我想测试我的通用路由器,但我发现了一些问题:
- 如何“注入(inject)”应用程序?我可以创建一个 Express 实例 (
var app = express();
),但我认为模拟会更好(因为这是单元测试,而不是集成测试!)。获得适当模拟的最佳方法是什么? - 我究竟应该测试什么?据我所知,我的路由器本身(没有集成)除了控制台输出(不值得测试)和函数调用(
controller.create(req, res);
).我应该如何测试这个函数是否被调用?或者还有什么要测试的吗?
最佳答案
您可能应该对应用程序进行 stub 实现。
您要测试的是构造函数在指定路由+HTTP 方法上注册监听器。我建议将 Sinon.js stub 放入您的应用程序 stub 中,然后在您的测试中检查它们是否使用预期参数调用。
关于node.js - 单元测试快速路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28275102/