【问题标题】:How do I create a relationship in ember-cli-mirage?如何在 ember-cli-mirage 中创建关系?
【发布时间】:2015-08-01 11:18:44
【问题描述】:

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

【问题讨论】:

    标签: ember.js ember-cli-mirage


    【解决方案1】:

    目前您需要手动分配 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 数据库中创建相关数据。现在,如果您的路线已设置为返回相关数据,那么您应该已准备就绪。

    【讨论】:

    • 在scenario.js中我使用了server.createList('team', 5, {task: task.id});但它只保存最后一个团队模型的关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    相关资源
    最近更新 更多