使用mocha和chai测试重定向

3

使用mocha和chai对expressjs进行重定向测试始终会失败,出现“未捕获断言错误:期望30{1-3}状态码的重定向但得到了200”。 以下是注册页面的测试。成功注册后,测试代码期望将重定向到登录页面。因此,期望的响应代码是302。但我得到的响应代码是200

it("Registration Check", done => {
    chai
      .request(server)
      .post("/register")
      .send({
        name: "pkv",
        email: "pkv@pkv.com",
        password: "pkv",
        cpassword: "pkv"
      })
      .end((err, res, body) => {
        res.should.have.status(302);
        done();
      });
  });

测试的 Express JS 代码如下。在成功注册后,响应将重定向到登录页面。
   if (userInfo.password == userInfo.cpassword) {
  if (regexEmail.test(userInfo.email)) {
    models.user
      .find({
        email: userInfo.email
      })
      .then(user1 => {
        if (user1.length) {
          res.json({
            Err: "Error"
          });
          console.log("Already Existing user");
        } else {
          var newuser = new models.user({
            name: userInfo.name,
            email: userInfo.email,
            password: cpass
          });

          newuser.save(function(err, user) {
            if (err) {
              console.log("error");
            } else {
              models.user.find(function(err, response) {
                res.redirect("/login");
              });
            }
          });
        }
      })
      .catch(err => {
        res.send("Error in database connection");
      });
  } else {

    res.json({
      err: "error"
    });
  }
} else {
  res.json({
    Response: " Password Mismatch"
  });
}

你是怎么知道 @M Hari 的? - j10
1个回答

6

chai-http库会自动跟随重定向的路径,因此您测试的响应将是/login的响应。如果您想断言重定向的状态码,可以使用redirects(0)。示例:

it("Registration Check", done => {
    chai
      .request(server)
      .post("/register")
      .send({
        name: "pkv",
        email: "pkv@pkv.com",
        password: "pkv",
        cpassword: "pkv"
      })
      .redirects(0)
      .end((err, res, body) => {
        res.should.have.status(302);
        done();
      });
  });


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