创建工厂女孩实例创建另一个工厂女孩实例

时间:2017-12-06 06:02:29

标签: javascript node.js npm factory-bot

这就是我的数据在数据库中的样子:

{
    "id": 4,
    "name": "New Sad",
    "open": true,
    "description": "The happiest place on earth!",
    "gps": "133.232, 121.021",
    "regionId": 1,
    "location": "{\"regionName\":\"Bishop\",\"regionId\":1}",
    "updatedAt": "2017-12-06T05:24:44.683Z",
    "createdAt": "2017-12-06T05:24:44.683Z"
}

我hava jsonb列,这是为了搜索原因,因为动态查询所有父表太慢,这就是我不使用factory.assoc 的原因。我不能使用assoc并立即引用它创建的内容。

为了定义我的工厂女孩​​,我想我可以这样做:

module.exports = async factory => {
  const region = await factory.create('region');
  const area = factory.define('area', Area, () => {
    return {
      name: factory.chance('first'),
      open: true,
      description: factory.chance('sentence', {words: 5}),
      gps: '122.123, 123.342',
      regionId: factory.assoc('region', 'id'),
      location: JSON.stringify({
        regionName: region.dataValues.name,
        regionId: region.dataValues.id,
      }),
    };
  });
  return area;
};

错误讯息:

  

(node:49078)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:2):错误:请求的工厂区域无效   (节点:49078)[DEP0018]弃用警告:不推荐使用未处理的拒绝承诺。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。

1 个答案:

答案 0 :(得分:0)

不确定为什么它在我第一次尝试时不起作用,但现在它的工作原理如下:

const Area = require('../../src/models').Area;

module.exports = factory => {
  const area = factory.define('area', Area, async () => {
    const region = await factory.create('region');
    return {
      name: factory.chance('first'),
      open: true,
      description: factory.chance('sentence', {words: 5}),
      gps: '122.123, 123.342',
      regionId: region.dataValues.id,
      location: JSON.stringify({
        regionName: region.dataValues.name,
        regionId: region.dataValues.id,
      }),
    };
  });
  return area;
};