Я пытаюсь выполнить юнит-тест одного из моих контроллеров. Я использую Jest с NodeJS.
Это userController.js
const jwt = require('jsonwebtoken');
const bcrypt = require('bcrypt');
const secret = require('../config/secret');
const User = require('../services/userService');
exports.signup = (req, res) => {
// if (!req.body.email || !req.body.password) {
// res.json({
// success: false,
// message: 'Please pass email and password.'
// });
// } else {
try {
bcrypt.hash(req.body.password, 12).then(hash => {
const user = new User({
name: req.body.name,
email: req.body.email,
password: hash
});
User.save(user,
(err, user) => {
if (err) {
return res.status(500).json({
success: false,
message: 'Email already exists.'
});
}
res.status(201).json({
success: true,
message: 'User created!',
userId: user
});
});
});
} catch (error) {
res.json({
message: 'Invalid authentication credentials!'
});
};
};
// };
Это userService, который создает запрос к базе данных.
const sql = require('../config/connection');
const User = require('../models/user.model');
User.save = function signup(user, result) {
sql.query("INSERT INTO Users SET ?", user,
(err, res) => {
if (err) {
result(err, null);
}
else {
result(null, res.insertId);
}
});
};
module.exports = User;
Это пользователь. контрольная работа. Я не уверен, что реализовал это правильно.
const request = require('supertest-as-promised');
const server = require('../../app');
const userController = require('../../controllers/userControllers');
describe('SignUp', () => {
describe('/POST users', () => {
it('should create new user', async () => {
const body = {
name: 'Test123',
email: 'test123@mail.com',
password: '123098'
}
const res = await userController.signup(request(server).post('/api/auth/signup').send(body));
expect(res.status).toBe(201);
expect(res.body).toHaveProperty('success', true);
})
})
})
Скажите, пожалуйста, как смоделировать запрос к базе данных и ответить на него для модульного тестирования?