使用数据工厂人插件的对象模拟

时间:2017-04-24 06:52:28

标签: unit-testing ember.js ember-data

我是Embebr js的新手,并使用ember-data-factory插件来模拟ajax响应,但无法模拟下面的响应。

 {
      "employee/profile": {
        "id": 60799,
        "gender": "Male",
        "fname": "Mick",
        "lname": "Hussey",
        "addresses": [
          "50345"      
        ]   
      },
      "employee/addresses": [
        {
          "id": "50345",
          "addressState": "GA",
          "zip": "30004"  
        }     
      ] 

    } 

为了实现这一点,我在tests / factories /目录中创建了配置文件和地址模型。 员工/个人资料模型

import FactoryGuy from 'ember-data-factory-guy';

FactoryGuy.define('employee/profile', {
  default: {    
    id: 60799,
    gender: 'Male',
    fname: 'Mick',
    lname: 'Hussey',
    addresses:  FactoryGuy.hasMany('employee/address')  
  } 
});

地址型号:

import FactoryGuy from 'ember-data-factory-guy';

FactoryGuy.define('employee/address', {
  default: {   
    id: '50345',
    addressState: 'GA',
    zip: '300014'   
    employee: FactoryGuy.belongsTo('employee/profile'),

  }
});

当我尝试使用下面的代码片段构建配置文件对象时,除了地址之外的所有字段都会被填充。

let profile = this.build('employee/profile');

任何人都可以帮我理解哪里出错了。

由于 高塔姆

1 个答案:

答案 0 :(得分:1)

您需要按如下方式定义关系:

addresses:  FactoryGuy.hasMany('employee/address', 1)

通过这种方式,您可以指示您想要一个只包含一个项目的地址数组。如果省略最后一个,则最终会得到一个空的地址列表。请参阅githubhasMany的源代码。

顺便说一句,如果您需要,我已为您准备了twiddle。我不是专家;但我尽我所能。您可以在profile下查看unit/models/emoloyee/profile-test.js模型的工厂定义和单元测试。希望这会有所帮助。