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

时间:2015-08-01 11:18:45

标签: ember.js ember-cli-mirage

我试图在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'),
});

1 个答案:

答案 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数据库中创建相关数据。现在,如果您的路线设置为返回关联数据,则应该全部设置。