Итак, в прошлом я никогда не проводил тестирование во всех своих проектах и решил начать его реализацию в новом проекте, над которым работаю. Как новичок, я немного запутался с выводом, который я получаю.
Когда я использую Postman. Он не возвращает ошибку 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: "[email protected]",
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);
Если есть что-то еще, что я упускаю, что вы хотели бы увидеть, пожалуйста, не стесняйтесь спрашивать и с нетерпением жду лучшего понимания тестирования.
try...catch
вокруг участков кода, которые, по вашему мнению, должны работать. Например, оборачивая вызовUser.findOne
в блок try...catch, а затемconsole.log(err)
в блок catch. Это может не быть источником проблемы, но может помочь вам отследить проблему или исключить ее из списка потенциальных источников. - person JayReardon   schedule 16.10.2018supertest
, и цель блоковtry...catch
состоит в том, чтобы помочь определить, что это может быть. Мы используемsupertest
почти так же, как и вы, в наших проектах ExpressJS, и стратегия, которую я описал, помогла нам выявить проблемы с настройкой в нашем модульном тестировании. - person JayReardon   schedule 16.10.2018