In tests that use a database, it's necessary to clean out the tables before each run (we don't use after so we can debug a failed test's db).
Sometimes we forget the syntax though so here's what we do:
before(function truncateDatabase (done) {
// http://docs.sequelizejs.com/en/v3/docs/raw-queries/
// https://www.postgresql.org/docs/9.3/static/sql-truncate.html
// DEV: PostgreSQL doesn't support truncating all tables via a `*`
// DEV: Our query is vulnerable to SQL injection but we can't use bind and trust our table names more/less
var tableNames = _.pluck(_.values(sequelize.models), 'tableName');
sequelize.query('TRUNCATE TABLE ' + tableNames.join(', ')).asCallback(done);
});
It's been three years but a good reason not to do this is because
sync
ignores the schema migrations. This may sound inconsequential but there are things with sequelize like defaulting ids to UUIDs where the best solution remains configuring the database within migrations.