Как создать объект в Ember-Cli-Mirage? - PullRequest
1 голос
/ 23 января 2020

У меня есть модель foo, у которой есть bar и bar принадлежит baz. Как я могу включить создание baz, когда foo создается вместе с bar? Всякий раз, когда создается foo, должно создаваться 10 bar, и для каждого bar

создается baz. На моем /factories/foo.js у меня есть

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

1 Ответ

2 голосов
/ 23 января 2020

Один из вариантов: фабрика bar создаст свой собственный baz:

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

Таким образом, каждый раз, когда вызывается server.create('bar') (независимо от того, где), каждый столбец получит обновленный со своим собственным baz.

Вы можете даже использовать помощник по ассоциации , чтобы сделать это за вас - он в основном заботится об этом особом случае создания отношения 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')
    })
  });
}

Просто обратите внимание, что базовые фабрики должны быть минимальными действительными описаниями ваших моделей. + их отношения - если вы поместите эти автоматически создаваемые отношения в каждую базовую фабрику, а затем кто-то захочет написать тест для ситуации, когда эти отношения не существуют , им будет трудно. функция черт разработана специально для облегчения такого рода вещей:

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

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

Также обязательно прочитайте руководство по заводской практике ! :)

...