Как мне написать тест, чтобы смоделировать ответ из сервиса о создании нового пользователя? - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь выполнить юнит-тест одного из моих контроллеров. Я использую 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);
    })
  })
})

Скажите, пожалуйста, как смоделировать запрос к базе данных и ответить на него для модульного тестирования?

...