如何在QUnit中设置Ember Data多态模型?

时间:2014-03-20 23:55:22

标签: ember.js coffeescript ember-data polymorphic-associations

背景

我在我的项目中使用Ember Data的ActiveModelAdapter并定义了一些类似的模型:

App.GiftCard = DS.Model.extend(
  destination: DS.belongsTo('destination', polymorphic: true)

  isCampaign: (->
    @get('destination.constructor') == App.Campaign
  ).property()
)

App.Destination = DS.Model.extend()

App.Campaign = DS.Model.extend()

我的礼品卡型号具有多态关系作为目的地,其中一种类型将是广告系列。

这一切都在应用程序中按预期工作,但现在我尝试使用QUnit编写isCampaign行为的单元测试。我无法弄清楚的部分是如何创建GiftCard记录并将广告系列指定为多态目的地?

我尝试过几种不同的方法。第一个是创建一个活动记录并将其分配给目标属性:

首次尝试

campaign = @store.createRecord('campaign', id: 1)
@gift_card = @store.createRecord('gift_card',
  id: 1
  amount: 100.00
  destination: campaign
)

但是这给出了错误:

  

断言失败:您只能添加'目的地'记录这种关系

我尝试的另一件事就是创建一个目标记录,并指定类型:

第二次尝试

campaign = @store.createRecord('destination', id: 1, type: 'campaign')

@gift_card = @store.createRecord('gift_card',
  id: 1
  amount: 100.00
  destination: campaign
)

但在这种情况下,destination.constructorApp.Destination,这不是我想要的。

其他信息

对于它的价值,我设置关系的API中的JSON如下所示:

{
  "gift_card":{
    "id":1,
    "amount":100.0,
    "destination":{
      "type":"campaign",
      "id":5
    },
    "created_at":"2013-12-10T01:17:30.373Z"
  }
}

1 个答案:

答案 0 :(得分:0)

我能够通过将createRecord更改为push并将目标指定为ID,并将destinationType指定为模型来实现此目的:

@store.createRecord('campaign', id: 1)

@gift_card = @store.push('gift_card',
  id: 1,
  amount: 100.00,
  destination: 1,
  destinationType: 'campaign'
)