IIC2513-2021-1 / projects

Repositorio oficial para los proyectos de ambas secciones del periodo 2021-1 del curso PUC IIC2513
14 stars 6 forks source link

JEST - foreign key constraint "" cannot be implemented #56

Open Zetaku1 opened 3 years ago

Zetaku1 commented 3 years ago

Hola!

Al seguir el ejemplo del profesor para crear un test en la base de datos, jest me tira el siguiente error: foreign key constraint "posts_userId_fkey" cannot be implemented

Lo extraño es que al usar la base de datos normalmente no tenemos problemas. Es decir que si hacemos db:drop, db:create, db:migrate no hay problema alguno y la aplicación funciona bien.

Tambien intenté hacer sync por separado de los modelos pero me tira el mismo error.

Es decir intenté lo siguiente:

    await orm.user.sync({ force: true });
    await orm.post.sync({ force: true });
    await orm.savedpost.sync({ force: true });

En vez de:

    await orm.sequelize.sync({ force: true });
Zetaku1 commented 3 years ago

El conflicto lo resuelvo al usar solo el modelo user en los test.

Es decir solo hago la tabla user, para los test de user:

 await orm.user.sync({ force: true });

debe ser por que tenemos implementado este codigo en las migraciones:

      userId: {
        type: Sequelize.INTEGER,
        onDelete: 'CASCADE',
        references: {
          model: 'users',
          key: 'id',
        },

Al correr db:migrate funciona correctamente, pero al hacerlo con sync en jest no funciona.

tomasjelvez commented 3 years ago

Hola! pudiste solucionar el problema? Con mi grupo tenemos un problema parecido, pero en nuestro caso sequelize.sync() no nos crea la base de datos por un error en los archivos node_modules. image Intente tambien hacer sync() para cada modelo por separado, pero segiuimos teniendo el mismo problema.

Zetaku1 commented 3 years ago

En la capsula de jest talvez te puede servir ver como hace se BeforeAll Sequelize sync, o correr jest con la tag --runInBand puede serles util. Tambien hacer sequelize sync de solo los modelos que necesiten en el test es otra opción