Connect中单元测试之session mock解决方案
发布于 12 年前 作者 JacksonTian 7283 次浏览 最后一次编辑是 8 年前

在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匹配或者不匹配的情况。

回到顶部