title: sequelize.sync({ force: true }) sometimes fails to set up database correctly
body: <p>I'm trying to set up test fixture with Sequelize and PostgreSQL. However, the tests I wrote sometimes pass, and sometimes fail. The errors range from <code>SequelizeDatabaseError: type "participants_id_seq" already exists</code> to <code>SequelizeUniqueConstraintError: Validation error</code> to <code>SequelizeDatabaseError: relation "participants" does not exist</code>, which leads me to believe that either I've set up the await incorrectly, or I've set up the sync incorrectly. I've tried using async/await, and I've also tried setting up Promises with callbacks without any luck. </p>
  
  <p>Before each test, I call <code>sync({ force: true })</code>, like so</p>
  
  <pre><code>const { sequelize, participants: Participants } = require('../../models');
  
  const existingUserCredentials = {
    teamName: 'TeamName',
    firstName: 'FirstName',
    lastName: 'LastName',
    email: 'helloworld@helloworld.com',
    password: 'helloworld',
  };
  
  const Fixture = async () =&gt; {
    try {
      await sequelize.sync({ force: true });
      await Participants.create(existingUserCredentials);
    } catch (err) {
      logger.error(err);
      throw err;
    }
  };
  
  module.exports = {
    Fixture
  };
  </code></pre>
  
  <p>I'm then calling this in my test cases like so:</p>
  
  <pre><code>describe('POST /login', () =&gt; {
    beforeEach(async () =&gt; {
      await Fixture();
    });
  
    it('throws unauthorized when user does not exist', async () =&gt; {
      const { body, status } = await request(app)
        .post('/api/login')
        .send({
          email: 'someemail@helloworld.com',
          password: 'hunter123',
        });
  
      expect(body).toEqual({
        message: messages.INVALID_LOGIN_CREDENTIALS,
      });
      expect(status).toEqual(HttpStatus.UNAUTHORIZED);
    });
  });
  </code></pre>
  
  <p>This test will pass some of the time, and fail the rest of the time with different errors.</p>
  
  <p>My model looks like this:</p>
  
  <pre><code>const bcrypt = require('bcryptjs');
  
  module.exports = (sequelize, DataTypes) =&gt; {
    const Participant = sequelize.define('participants', {
      teamName: {
        type: DataTypes.STRING,
        allowNull: true,
      },
      firstName: {
        type: DataTypes.STRING,
        allowNull: false,
      },
      lastName: {
        type: DataTypes.STRING,
        allowNull: false,
      },
      email: {
        type: DataTypes.STRING,
        allowNull: false,
      },
      password: {
        type: DataTypes.STRING,
        allowNull: false,
        set(password) {
          const hash = bcrypt.hashSync(password, bcrypt.genSaltSync(10));
          this.setDataValue('password', hash);
        },
      },
    });
  
    Participant.verifyPassword = (password, hash) =&gt;
      bcrypt.compareSync(password, hash);
  
    return Participant;
  };
  </code></pre>
  
  <p>and my migration looks like this</p>
  
  <pre><code>module.exports = {
    up: (queryInterface, Sequelize) =&gt;
      queryInterface.createTable('participants', {
        id: {
          allowNull: false,
          autoIncrement: true,
          primaryKey: true,
          type: Sequelize.INTEGER,
        },
        teamName: {
          type: Sequelize.STRING,
          allowNull: true,
        },
        firstName: {
          type: Sequelize.STRING,
          allowNull: false,
        },
        lastName: {
          type: Sequelize.STRING,
          allowNull: false,
        },
        email: {
          type: Sequelize.STRING,
          allowNull: false,
        },
        password: {
          type: Sequelize.STRING,
          allowNull: false,
        },
        createdAt: {
          allowNull: false,
          type: 'TIMESTAMP',
          defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
        },
        updatedAt: {
          allowNull: false,
          type: 'TIMESTAMP',
          defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
        },
      }),
    down: (queryInterface) =&gt; queryInterface.dropTable('participants'),
  };
  </code></pre>
  
  <p>Am I setting this up properly so I can have a clean database for each test? Thanks for the help!</p>