Получение 500 «Внутренняя ошибка сервера» при использовании Supertest - PullRequest
0 голосов
/ 16 октября 2018

Итак, я никогда ранее не проводил никакого тестирования во всех своих проектах и ​​решил начать внедрять его в новом проекте, над которым я работаю.Как абсолютный новичок, я немного запутался с полученным результатом.

Когда я использую Почтальон.Он не возвращает ошибку 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 голосов
/ 10 июля 2019

Ответ, ожидаемый 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);
  });
});

Теперь сравните ожидаемое и отправленное сервером.И внесите изменения в свой код (в ответе, полученном тестом, так как большую часть времени это идентификатор объекта / документа в коллекции базы данных, поскольку он поставляется с ответом),

Не забудьте изменить 500вернуться к 200 и продолжить изменения.

...