Mysterious Errors — SequelizeBaseError: Insert or Update on Table Violates Foreign Key Constraints

Sequelize is a great library, but its documentation leaves a lot to be desired.

Recently, while writing unit tests for an e-commerce site project, I came across this cryptic error:

SequelizeBaseError: insert or update on table “reviews” violates foreign key constraint “reviews_user_id_fkey”

From the error, it’s not too clear what has gone wrong.

The model I was testing had two associations, using Sequelize’s belongsTo method.

Sequelize generates setter methods with the name of the associated model.

For example, the association Review.belongsTo(User) will generate a method setUser().

Our Review model would now have an integer id of the associated model.

I assumed that I could fake associations by calling review.setUser() with an integer directly, even though no model in the database had that id. Nope!

Here’s the problematic test:

It turns out that to call the setAssociation method, you’ll need to create actual records in your database. To set the association, you need a model to associate.

How I fixed it:

These will run before every test, making sure data is available for your test. Now the test will work.

Hope this saves you some debugging time!

Originally published at gist.github.com.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.