使用Supertest时获得500“内部服务器错误”

时间:2018-10-16 17:21:59

标签: node.js testing mocha chai supertest

因此,过去我实际上从未在所有项目中实施过任何测试,因此决定在我正在从事的新项目中开始实施它。作为一个初学者,我对我得到的输出有些困惑。

当我使用邮递员时。它不会返回500错误,而是将信息保存到后端。我在运行测试时遇到的错误是

1) POST /users
       Creates a new user:
     Error: expected 200 "OK", got 500 "Internal Server Error"

我还将显示代码的外观,以期找出我要去哪里。

//测试

var express = require("express");
var request = require("supertest");
var app = express();
let router = require("../../server/routes/api/users");

app.use(router);

describe("GET /test", function() {
  it("Returns a json for testing", function(done) {
    request(app)
      .get("/test")
      .set("Accept", "application/json")
      .expect("Content-Type", /json/)
      .expect(200, done);
  });
});

describe("POST /users", () => {
  let data = {
    name: "dummy",
    email: "dummy@dummy.com",
    password: 123456
  };

  it("Creates a new user", done => {
    request(app)
      .post("/register")
      .send(data)
      .set("Accept", "application/json")
      .expect("Content-Type", "text/html; charset=utf-8")
      .expect(200)
      .end(err => {
        if (err) return done(err);
        done();
      });
  });
});

//用户路由文件

router.post("/register", (req, res) => {
  User.findOne({ email: req.body.email }).then(user => {
    if (user) {
      res.json({ msg: "User exist" });
    } else {
      const newUser = new User({
        name: req.body.name,
        email: req.body.email,
        password: req.body.password
      });

      newUser
        .save()
        .then(user => console.log(user))
        .catch(err => console.log(err));
    }
  });
});

//用户猫鼬模型文件

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

// Create Schema
const UserSchema = new Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },
  date: {
    type: Date,
    default: Date.now
  }
});

module.exports = User = mongoose.model("users", UserSchema);

如果有其他我想念的地方,请您随意提出,并希望对测试有更好的了解。

1 个答案:

答案 0 :(得分:0)

POST测试期望的响应与服务器发送的响应不匹配。 在POST测试中,将200更改为500并显示响应,然后您将看到预期的响应和服务器发送的响应,因此可以比较两者并进行更改。 有点像这样---

 describe("POST /users", () => {
  let data = {
    name: "dummy",
    email: "dummy@dummy.com",
    password: 123456
  };

  it("Creates a new user", done => {
    request(app)
      .post("/register")
      .send(data)
      .set("Accept", "application/json")
      .expect("Content-Type", "text/html; charset=utf-8")
      .expect(response => {console.log(response)})
      .expect(500,end);
  });
});

现在比较预期的内容和服务器发送的内容。 并更改您的代码(在测试收到的响应中,大多数情况下,它是响应随附的数据库集合中的对象/文档ID),

不要忘记将500改回200并继续进行更改。