工厂女孩设置了续集适配器
factory girl set up with sequelize adapter
我在做什么
我正在使用带有 sequelize 适配器的 factory girl 来测试 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;
我的摩卡测试文件:
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 is not a function
所以我知道这与模型没有 return 作为构造函数有关。但是如何使它 return 成为构造函数呢?
如果我按如下方式更改工厂中的 require 方法:
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 })
};
});
然后我得到错误 factory.define
不是函数。
我希望这更清楚...但是当您 define
一个工厂时,需要传入一个 FUNCTION CONSTRUCTOR。
const Region = require("../../src/models").Region;
如果您定义上面列出的模型,这将是一种方法。但关键是我需要为模型传递构造函数。
我在做什么
我正在使用带有 sequelize 适配器的 factory girl 来测试 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;
我的摩卡测试文件:
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 is not a function
所以我知道这与模型没有 return 作为构造函数有关。但是如何使它 return 成为构造函数呢?
如果我按如下方式更改工厂中的 require 方法:
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 })
};
});
然后我得到错误 factory.define
不是函数。
我希望这更清楚...但是当您 define
一个工厂时,需要传入一个 FUNCTION CONSTRUCTOR。
const Region = require("../../src/models").Region;
如果您定义上面列出的模型,这将是一种方法。但关键是我需要为模型传递构造函数。