使用 Supertest 时收到 500“内部服务器错误”

Yam*_*ama 4 testing mocha.js node.js chai supertest

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

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

1) POST /users
       Creates a new user:
     Error: expected 200 "OK", got 500 "Internal Server Error"
Run Code Online (Sandbox Code Playgroud)

我还将展示我的代码是什么样子,以便希望找出我出错的地方。

// 测试

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();
      });
  });
});
Run Code Online (Sandbox Code Playgroud)

// 用户路由文件

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));
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

// 用户 mongoose 模型文件

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);
Run Code Online (Sandbox Code Playgroud)

如果您还想了解我遗漏的其他内容,请随时询问并期待更好地了解测试。

nee*_*sht 6

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, done);
  });
});
Run Code Online (Sandbox Code Playgroud)

现在比较预期的内容和服务器发送的内容。并在代码中进行更改(在测试收到的响应中,因为大多数时候它是数据库集合中的对象/文档 ID,因为它随响应一起提供),

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