Как вставить `id` из модели empresa в usuario с фабрикой для использования в Jest (TDD) - PullRequest
0 голосов
/ 19 марта 2020

Заранее большое спасибо. Я новичок в этой части тестирования. Как я могу понять, что модели не нужна другая модель, связанная с

У меня проблема размещения данных о связи между моделями по фабрикам, как я могу сделать эти файлы.

Я оставил используемые мной модели и файлы

src/app/model/empresa.js
import Sequelize, { Model } from 'sequelize';

class Empresas extends Model {
  static init(sequelize) {
    super.init(
      {
        cnpj: Sequelize.STRING,
        razao_social: Sequelize.STRING,
        nome_fantasia: Sequelize.STRING,
        status: Sequelize.BOOLEAN,
        paleta_cor_1: Sequelize.STRING,
        paleta_cor_2: Sequelize.STRING,
        fk_logo_id: Sequelize.INTEGER,
      },
      {
        sequelize,
        modelName: 'empresas',
      }
    );
    return this;
  }
  static associate(models) {
    this.belongsTo(models.imagens, { foreignKey: 'fk_logo_id', as: 'logo' });
  }
}
export default Empresas;
src/app/model/usuario.js
import Sequelize, { Model } from 'sequelize';
class Usuario extends Model {
  static init(sequelize) {
    super.init(
      {
        fk_empresa_id: Sequelize.INTEGER,
        email: Sequelize.STRING,
        senha_hash: Sequelize.STRING,
        permissao: Sequelize.STRING,
      },
      {
        sequelize,
        modelName: 'usuarios',
      }
    );
    return this;
  }
  static associate(models) {
    this.belongsTo(models.empresas, {
      foreignKey: 'fk_empresa_id',
      as: 'empresa',
    });
  }
}
export default Usuario;

В тестах

__tests__/factories/empresa.factory.js
import faker from 'faker';
import { factory } from 'factory-girl';

import Empresa from '../../src/app/models/Empresa';
factory.define('Empresa', Empresa, {
  cnpj: faker.random.uuid,
  nome_fantasia: faker.company.companyName,
  logo: faker.image.business,
  status: faker.random.boolean,
  paleta_cor_1: faker.commerce.color,
  paleta_cor_2: faker.commerce.color,
});
export default factory;
__tests__/factories/usuario.factory.js
import faker from 'faker';
import { factory } from 'factory-girl';

import Usuario from '../../src/app/models/Usuario';
factory.define('Usuario', Usuario, {
  fk_empresa_id: faker.random.number(),
  email: faker.internet.email,
  senha_hash: faker.internet.password,
  permissao: faker.name.jobArea,
});
export default factory;

Thx. как получить ключ компании?

1 Ответ

0 голосов
/ 19 марта 2020
// create many:
    const delivery = await factory.create('Delivery');
    await factory.createMany('DeliveryProblem', 2, {
      delivery_id: delivery.id,
    });

// create: 
    const deliveryman = await factory.create('Deliveryman');
    const recipient = await factory.create('Recipient');

    const delivery = await factory.build('Delivery', {
      deliveryman_id: deliveryman.id,
      recipient_id: recipient.id,
    });

На заводе-изготовителе есть автоматические модели, в которых есть все, что нужно, чтобы увидеть, как они выглядят, и какие есть модели. Então faço assim:

factory.define(
  'Delivery',
  Delivery,
  () => ({
    product: faker.commerce.productName(),
  }),
  {
    afterBuild: async (model, attrs) => {
      const delivery = model;

      if (!attrs.recipient_id) {
        const recipient = await factory.create('Recipient');
        delivery.recipient_id = recipient.id;
      }

      if (!attrs.deliveryman_id) {
        const deliveryman = await factory.create('Deliveryman');
        delivery.deliveryman_id = deliveryman.id;
      }

      return delivery;
    },
  }
);
```
...