繁体   English   中英

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

[英]How to create a object in ember-cli-mirage?

我有一个foo模型,它 hasMany barbar BeingsTo 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') (无论在哪里),每个 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 });
  }
})

另外一定要阅读工厂最佳实践指南! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM