我试图在Ember-Cli-Mirage中创建关系。这可能是一种简单的方式,还是我必须使用固定装置而不是工厂?
这些将是我的模特:
TASK:
export default DS.Model.extend({
taskName: DS.attr('string'),
team: DS.hasMany('team', {async: true}),
taskScore: DS.hasMany('taskScore', {async: true})
});
TEAM:
import DS from 'ember-data';
export default DS.Model.extend({
teamName: DS.attr('string'),
task: DS.hasMany('task'),
taskScore: DS.hasMany('taskScore', {async: true})
});
TASKSCORE:
import DS from 'ember-data';
export default DS.Model.extend({
score: DS.attr('number'),
team: DS.belongsTo('team'),
task: DS.belongsTo('task'),
});
答案 0 :(得分:6)
目前您需要手动分配ID。您可以在fixture文件中执行此操作,但我更喜欢使用工厂,因为它们在我的测试中给了我更多的灵活性。
定义工厂,只需指定普通属性:
// app/mirage/factories/task.js
export default Mirage.Factory.extend({
task_name(i) { return `Task ${i}`; },
});
// app/mirage/factories/team.js
export default Mirage.Factory.extend({
team_name(i) { return `Task ${i}`; },
});
然后使用工厂覆盖将您的数据与测试相关联:
// tests/acceptance/some-test.js
test('', function() {
let task = server.create('task');
server.createList('team', 5, {task_id: task.id});
});
这将在Mirage数据库中创建相关数据。现在,如果您的路线设置为返回关联数据,则应该全部设置。