как написать тест для тестирования контроллера и API, чтобы я мог запускать проверки PR без зависимости от базы данных? - PullRequest
0 голосов
/ 28 мая 2020

Это код контроллера. Этот пост или создает пользователя. адрес электронной почты должен быть уникальным, и учетная запись не может быть создана повторно с тем же адресом электронной почты.


    exports.saveUser = (request, response) => {

        const result = (savedUser) => {
            response.status(200);
            response.json(savedUser);
        };

        bcrypt.hash(request.body.user.password, saltRounds, function(err, hash) {
            let user = {
                first_name : request.body.user.firstName,
                last_name : request.body.user.lastName,
                email : request.body.user.email,
                hashed_password : hash
            }
            console.log("conroller")
            const promise = userService.save(user);

            promise
                .then(result)
                .catch(renderErrorResponse(response));
        });

    };


Это уровень обслуживания


    'use strict';
    const db = require("./../../models")
    /**
     * Saves the new user object.
     *
     * @param user
     */

    exports.save = (user,result) => {

       return db.User_tbl.create({
            first_name: user.first_name,
            last_name:user.last_name,
            email:user.email,
            hashed_password:user.hashed_password
          })
    }

Ниже представлена ​​модель пользователя


    module.exports = (sequelize,DataTypes)=>{
        const user = sequelize.define("User_tbl",{
            first_name:{
                type: DataTypes.STRING(64),
                allowNull:false
            },
            last_name:{
                type: DataTypes.STRING(64),
                allowNull:false
            },
            email:{
                type: DataTypes.STRING(64),
                allowNull:false,
                unique:true
            },
            hashed_password:{
                type: DataTypes.STRING(255),
                allowNull:false
            },
            id:{
                type:DataTypes.INTEGER,
                primaryKey:true,
                autoIncrement: true
            }
        })
        return user;
    }

Вещи Я включил тестовый тест, который попал в тестовую базу данных ... но это не работает при проверках PR, поскольку на стороне хоста нет базы данных. Пробовал фиктивное продолжение, но неправильная документация.

1 Ответ

0 голосов
/ 28 мая 2020
  1. Контекст: ваша тестируемая функция - saveUser .

Случай: невозможно создать учетную запись пользователя снова с тем же адресом электронной почты. Если вы хотите использовать Sinon, вам необходимо заглушка userService.save . Вам нужно определить заглушку, которая аргумент проверки и определяет поведение заглушки при первом вызове (который является успешным) и при втором вызове (который не удался). И, наконец, вам нужно проверить, вызывается ли ваш заглушка дважды или хотя бы более одного раза. Я не могу привести пример, потому что почти не использую шутку, но принцип все тот же.

Контекст: вы хотите протестировать базу данных проверки нажатия в тестовой среде, но ее нет.

В зависимости от того, какую базу данных вы используете, вы можете использовать базу данных в памяти. Практика заключается в том, чтобы включить / запустить БД перед тестом и выключить / остановить после теста. Если вы используете mongodb, вы можете использовать mongodb-memory-server .

Надеюсь, это поможет.

...