Чем я занимаюсь

Я использую заводскую девушку с адаптером sequelize для тестирования с Mocha. Я знаю, что что-то не так с настройкой, но не могу решить проблему.

Вот мой код:

Модальный :

"use strict";

module.exports = (sequelize, DataTypes) => {
  const Region = sequelize.define("Region", {
    name: {
      type: DataTypes.STRING,
      allowNull: false
    },
    open: {
      type: DataTypes.BOOLEAN,
      allowNull: false
    },
    description: {
      type: DataTypes.STRING,
      allowNull: true
    }
  });
  Region.associate = models => {
    Region.hasMany(models.Area, {
      foreignKey: "regionId",
      as: "areas"
    });
  };
  return Region;
};

Завод:

var factory = require("factory-girl");
const adapter = new factory.SequelizeAdapter();
factory = factory.factory;
factory.setAdapter(adapter);

const Region = require("../../src/models/region");

factory.define("region", Region, () => {
  return {
    name: factory.chance("first"),
    open: "true",
    description: factory.chance("sentence", { words: 5 })
  };
});

Индексный файл для фабрики:

import factory from "factory-girl";

import "./regions";
import "./areas";

global.factory = factory;

export default factory;

Мой тестовый файл Mocha:

import chai from "chai";
import assert from "assert";
import app from "../../src/app";
import chaiHttp from "chai-http";
import factories from "../factories";
// import dotenv from "dotenv";
// dotenv.config({path: ".env.test"});
chai.use(chaiHttp);

describe("'regions'service", () => {
  it("should POST area", async () => {
    const region = await factories.create("region");
    const dummy = {
      name: "New area",
      open: true,
      description: "This is a cool area!",
      gps: "122.123, 123.4123",
      regionId: region.dataValues.id
    };
    const res = await chai
      .request(app)
      .post("/api/areas")
      .send(dummy);
    console.log(res.body);
    assert.equal(res.body.name, dummy.name);
  });
});

** Какую ошибку я получаю **

TypeError: Model.build не является функцией

Поэтому я получаю это, это то, что связано с моделью, не возвращается в качестве конструктора. Но как я могу вернуть конструктор?

Если я изменим метод требуния на заводе, как и в следующем:

var factory = require("factory-girl");
const adapter = new factory.SequelizeAdapter();
factory = factory.factory;
factory.setAdapter(adapter);
const sequelize = require("sequelize");
const DataTypes = sequelize.DataTypes;

const Region = require("../../src/models/region")(sequelize, DataTypes);

factory.define("region", Region, () => {
  return {
    name: factory.chance("first"),
    open: "true",
    description: factory.chance("sentence", { words: 5 })
  };
});

Тогда я получаю сообщение об ошибке {{x0}} не является функцией.

1
leogoesger 13 Ноя 2017 в 02:21

1 ответ

Лучший ответ

Хотелось бы, чтобы это было прояснено ... но когда вы define фабрику, необходимо передать FUNCTION CONSTRUCTOR.

const Region = require("../../src/models").Region;

Это будет способ сделать это, если вы определите модель, указанную выше. Но главное - мне нужно передать конструктор модели.

2
leogoesger 13 Ноя 2017 в 00:29