【发布时间】:2013-03-14 02:35:32
【问题描述】:
我希望通过对 Express.js 中间件的集成测试来推动行为。我遇到了一个有趣的情况,即应用程序背后的 Express 的行为是不可预测的(反正我不是)。
作为一个简化的例子:
var middlewareExample = function(req, res, next){
if(req.session){
refreshSession(req.session, function(err, data){
if(!err){
res.redirect('/error');
}
});
next();
}else{
res.redirect('/authenticate');
}
};
问题是在重定向之后对next 的调用,因为它位于内部函数之外并且是有条件的。我不确定 Express 如何处理对next 或res.redirect 的中间件/路由调用,如果它们碰巧发生在另一个之前或之后,如上所示。
手动测试没有发现任何奇怪的行为,超测模块也没有。我想知道 Express 是否以及如何应对此类情况。此外,可以使用超测来暴露任何潜在的不良行为。此外,如果可以的话,我想听听其他人一般会使用什么方法来测试 Node/Express 中间件。
【问题讨论】:
-
你想做什么?
res.redirect('/error')和next()都可以在同一个请求中调用,从而搞乱整个控制流程。 -
如果我尝试同时使用这两种方法,我会收到
Can't set headers after they are sent错误。 -
@JonathanOng 我试图通过测试揭示当允许在同一个请求中调用两个函数时应该发生的任何损坏。
-
@robertklep 有什么想法可以在何处以及以何种方式传播该错误?
-
它至少会显示在控制台上,但我认为你不能从“外部”检查它,因为它有点没有实际意义:响应(以重定向)已经发送到客户端。
标签: node.js testing express middleware