使用 Express 在 Node.js 中测试 HTTP 请求

6
我做了一个简单的身份验证系统,使用 express 在“/session”上进行了一些post/get/dels。我想测试这个系统,但似乎找不到简单的方法来从服务器简单地测试http.sendPut('/session', {data})。 有人有什么建议可以使用的库吗?
如果有帮助的话,我正在使用 Mocha/should 进行测试。
这是我要测试的超级简单的身份验证系统(它也连接到其他一些东西):
//Login
app.post("/session", function(req, res) {
  if (req.body.username === "admin" && req.body.password === "admin") {
    req.session.user = "user";
    res.send("Successfully logged in!");
  } else {
    res.send(403, "Invalid username or password.");
  }
});
//Logout
app.del("/session", function(req, res) {
  req.session.user = null;
  res.send("Successfully logged out.");
});
//Am I logged in? Check for the client
app.get("/session", function(req, res) {
  if (req.session.user) {
    res.send(req.session.user);
  } else {
    res.send(403, "You are not logged in.");
  }
});

谢谢。

https://github.com/mikeal/request 是非常受欢迎的。 - Ryan Olds
1个回答

6

Express.js使用supertest进行测试,而supertest基于superagent

如果需要示例,可以在Express.js test code中找到它们。

所有需要request = require('./support/http');的测试都使用supertest。


目前我正在使用这个,但是我需要一种在发送http请求后检查req.session的方法。我似乎找不到superagent或supertest中支持此功能的任何支持,有什么想法吗? - Andrew Joslin
我认为使用supertest不可能做到这一点。这更像是黑盒测试的风格,会话并不直接存在于http请求中。您可能需要更多单元测试风格的测试,其中测试中间件(function(req, res)),并检查req或res的状态。我有一个辅助模块,在我的项目中使用它来完成这项工作。https://github.com/Enome/express-recorder/blob/master/specs/middleware.js 或许您可以从这个模块中获取一些灵感。 - Pickels

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接