如何在 ember-cli-mirage 中创建关系?

How do I create a relationship in ember-cli-mirage?

我正在尝试在 Ember-Cli-Mirage 中创建关系。这是可能的简单方法还是我必须使用固定装置而不是工厂?

这些是我的模型:

任务:

export default DS.Model.extend({
  taskName: DS.attr('string'),
  team: DS.hasMany('team', {async: true}),
  taskScore: DS.hasMany('taskScore', {async: true})
});

团队:

import DS from 'ember-data';

export default DS.Model.extend({
  teamName: DS.attr('string'),
  task: DS.hasMany('task'),
  taskScore: DS.hasMany('taskScore', {async: true})
});

任务得分:

import DS from 'ember-data';

export default DS.Model.extend({
    score: DS.attr('number'),
    team: DS.belongsTo('team'),
    task: DS.belongsTo('task'),
});

目前您需要手动分配 ID。您可以在夹具文件中执行此操作,但我更喜欢使用工厂,因为它们使我的测试更加灵活。

定义您的工厂,只需分配普通属性:

// 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 数据库中创建相关数据。现在,如果您的路线设置为 return 关联数据,您应该已经准备就绪。