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);
});
model.destroy({
where: {},
truncate: true
})