Sequelize Создать вторую модель в BeforeCreate - PullRequest
0 голосов
/ 16 октября 2018

У меня есть транзакция Sequelize Model

var Transaction = sequelize.define('Transaction', {
    url: DataTypes.STRING,
    type: DataTypes.STRING,
    html: DataTypes.TEXT,
    brand: DataTypes.STRING,
    bookedBy: DataTypes.UUID,
    isCompliant: DataTypes.BOOLEAN,
    isConfirmedByUser: DataTypes.BOOLEAN,
    isConfirmedBySupplier: DataTypes.BOOLEAN,
    amount: DataTypes.DECIMAL,
    baseRate: DataTypes.DECIMAL,
    numberOfNights: DataTypes.DECIMAL,
    taxesAndFees: DataTypes.DECIMAL,
    total: {
        type: DataTypes.DECIMAL,
        default: 0,
    },
    searchCriterionId: DataTypes.UUID,
    queryStatId: DataTypes.UUID,
    searchCriterionId: DataTypes.UUID,
    userId: DataTypes.UUID,
    reason: DataTypes.TEXT,
    explanation: DataTypes.TEXT,
    isEdited: DataTypes.BOOLEAN,
}, {
    timestamps: true,
});

При создании я хотел бы проверить, связан ли travellerId.Если нет связанного с этим идентификатора путешественника, я хотел бы найти запись о путешественнике и связать ее с записью транзакции.Я попытался сделать это в хуке beforeCreate.

const assignTraveler =  async (transaction, options) => {
    if(!!transaction.travelers)
        return;

    const user = await transaction.getUser();
    transaction.setTravelers(
        [user.travelerId]
    );
};

Transaction.beforeCreate(assignTraveler);

Ассоциация выглядит следующим образом

Transaction.associate = function(models) {
    Transaction.belongsTo(models.User, {
        foreignKey: {
            allowNull: false,
        },
    });

    Transaction.belongsTo(models.QueryStat, {
        foreignKey: {
            allowNull: true,
        },
    });

    Transaction.belongsTo(models.SearchCriterion, {
        foreignKey: {
            allowNull: true,
        },
    });

    Transaction.belongsToMany(models.Traveler, {
        through: models.BookingTraveler,
        foreignKey: 'bookingId',
        constraints: false,
    });
};

Вот тест, который я запускаю.

describe.only('without a Traveler', () => {
    beforeEach(async () => {
        transaction = await user.createTransaction();
        travelers = await transaction.getTravelers();
    });

    it('should use bookedBy as the Traveler', () => {
        expect(transaction.id).not.toBeNull();
        expect(travelers).not.toBeNull();
        //This line is the line that is failing
        expect(user.travelerId).toEqual(travelers[0].id);
    });
});

Сбой теста прерывистый, поэтому я думаю, что это как-то связано с асинхронностью в ловушке.

База данных выглядит правильно, но когда я тестирую с использованием Jest, связанный TravelerId возвращается как ноль.Я полагаю, что это может быть связано с транзакцией базы данных mySql.

...