У меня есть транзакция 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.