Connect中单元测试之session mock解决方案
在Connect的项目中,如果遇到有session的部分,经常会造成无法注入session的方式,因为cookie中的connect.sid总是可能因为某些原因变化,不能保证一致。下面提供了一个方法,去修改已经通过app.use("/route", hander);
注册的控制器。
app.replace = function (route, handle) {
if (route === "/") {
return;
}
for (var i = 0, l = app.stack.length; i < l; i++) {
var ware = app.stack[i];
if (ware.route === route) {
app.stack[i].handle = handle;
break;
}
};
};
在测试的时候,通过
app.replace("/route", function (request, response) {
// 在此注入session中的数据。
request.session.user = {
sessionId: "d7cc03ea3b5bc3031dadfed21e014f",
userid: "balabala"
};
// 调用原始控制器
controller(request, response);
});
在测试完成后,记得通过replace替换回来。
app.replace("/route", controller);
通过这种方式,可以轻松mock session匹配或者不匹配的情况。