Sequelize Sync не является функцией
Я пытаюсь настроить тест, используя mocha с sequelize. Я хотел бы обрезать все таблицы и создавать новые до и после каждого теста. Я думал, что могу просто использовать sequelize.sync
,
Вот мой тест:
import chai from "chai";
import assert from "assert";
import app from "../../src/app";
import chaiHttp from "chai-http";
import factories from "../factories";
import Sequelize from "sequelize";
// import dotenv from "dotenv";
// dotenv.config({path: ".env.test"});
chai.use(chaiHttp);
describe("'regions'service", () => {
beforeEach(async () => {
await Sequelize.sync({ force: true });
});
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);
assert.equal(res.body.name, dummy.name);
});
});
Мое сообщение об ошибке:
TypeError: _sequelize2.default.sync is not a function
1 ответ
Я думаю, я понял, сиквелизировать все неправильно. Я должен использовать sequelize, чтобы установить соединение каждый раз, когда пытаюсь его использовать.
поэтому измените файл на:
import chai from "chai";
import assert from "assert";
import app from "../../src/app";
import chaiHttp from "chai-http";
import factories from "../factories";
import db from "../../src/models";
// import dotenv from "dotenv";
// dotenv.config({path: ".env.test"});
chai.use(chaiHttp);
describe("'regions'service", () => {
beforeEach(async () => {
await db.sequelize.sync({ force: true, logging: false });
});
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);
assert.equal(res.body.name, dummy.name);
});
});
Где мой файл базы данных выглядит следующим образом:
"use strict";
const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || "development";
const config = require(__dirname + "/../config/config.json")[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable]);
} else {
sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
);
}
fs
.readdirSync(__dirname)
.filter(file => {
return (
file.indexOf(".") !== 0 && file !== basename && file.slice(-3) === ".js"
);
})
.forEach(file => {
var model = sequelize["import"](path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;