如何在 ember-cli-mirage 中创建对象?

How to create a object in ember-cli-mirage?

我有一个 foo 模型,它有许多 barbar 属于 baz。当 foo 与其 bar 一起创建时,如何包含 baz 的创建?每当创建一个 foo 时,必须创建 10 个 bar 并且为每个 bar

创建一个 baz

在我的 /factories/foo.js 我有一个

  afterCreate(foo, server) {
    server.createList('bar', 10, { foo });
  }

一种选择是让 bar 工厂创建自己的 baz:

// factories/bar.js
export default Factory.extend({
  afterCreate(bar, server) {
    bar.update({
      baz: server.create('baz')
    })
  }
})

这样,每次调用 server.create('bar') 时(无论在何处),每个柱都会更新为自己的 baz

您甚至可以使用 the association helper 来为您完成这项工作——它基本上负责在创建基础模型时创建 belongsTo 关系的这种特殊情况:

import { Factory, association } from 'ember-cli-mirage';

// factories/bar.js
export default Factory.extend({
  baz: association()
})

您也可以直接从 foo 工厂进行:

// factories/foo.js
afterCreate(foo, server) {
  server.createList('bar', 10, { foo }).forEach(bar => {
    bar.update({
      baz: server.create('baz')
    })
  });
}

请注意,基础工厂应该是模型的最小有效描述 + 它们之间的关系——如果你将这些自动创建的关系放在每个基础工厂中,然后有人想为这些关系 存在,对他们来说很难。 traits feature 是专门为缓解这种情况而设计的:

// factories/bar.js
Factory.extend({
  withBaz: trait({
    baz: association()
  })
})

// factories/foo.js
Factory.extend({
  afterCreate(foo, server) {
    server.createList('bar', 10, 'withBaz', { foo });
  }
})

另请务必阅读 factory best practices 指南! :)