[英]How to create a object in ember-cli-mirage?
我有一个foo
模型,它 hasMany bar
和bar
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.