У меня проблема с тестированием вождения конечной точки для API, который я создаю. Конечная точка для человека, чтобы зарегистрироваться как новый пользователь / пользователи / регистрация. Когда я попал в маршрут со следующим телом запроса
{
"имя": "джон",
"электронная почта": "john@example.com"
"пароль": "Password1234!"
}
Я получаю 404, потому что возникает ошибка проверки из пользовательской схемы. В сообщении об ошибке указывается, что требуется пароль passwordHash. Моя схема настроена таким образом, что у меня есть поле виртуального пароля, и я хэширую это поле и сохраняю его в поле passwordHash, которое является обязательным. Это счастливый путь и не должен быть неудачным. Модульные тесты моей модели / схемы и тесты контроллера, которые охватывают эту функциональность, проходят. Однако, когда я тестирую маршрут, он терпит неудачу. Соответствующие файлы вставлены ниже. Если вы хотите посмотреть приложение и запустить его здесь, вы можете сделать репозиторий https://github.com/Euklidian-Space/voter-node/tree/user_routes. После запуска npm install запустите npm start, чтобы запустить сервер. Вам также понадобится mongodb.
Вот определение маршрута
const router = require("express").Router();
const UserController = require("../controllers/user_controller");
router.get("/:id", UserController.verifyToken, UserController.show);
router.post("/register", UserController.create);
module.exports = router;
Вот действие create в пользовательском контроллере
exports.create = async (req, res, next) => {
const [err, user] = await to(createUser(req.body));
if (err) return next(err);
const respObj = {
user,
token: token(user.id, JWT_KEY, jwt)
};
res.status(200).send(respObj);
return Promise.resolve(respObj);
};
Вот схема пользователя
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const bcrypt = require('bcryptjs');
const { validatePassword } = require("./validations");
const userSchema = new Schema({
name: {type: String, required: true},
email: {type: String, required: true},
passwordHash: {type: String, required: true},
polls: [{type: Schema.Types.ObjectId, ref: "Poll"}]
});
userSchema.virtual("password")
.get(function() { return this._password; })
.set(function(val) {
this._password = val;
validatePassword(val)
.then(pw => {
const salt = bcrypt.genSaltSync(10);
const hash = bcrypt.hashSync(pw, salt);
this.passwordHash = hash;
}).catch(err => this.invalidate("passwordHash", err));
});
module.exports = userSchema;