Ember.js 使用Ember CLI Mirage模拟多对多关系

Ember.js 使用Ember CLI Mirage模拟多对多关系,ember.js,relationships,acceptance-testing,ember-cli-mirage,Ember.js,Relationships,Acceptance Testing,Ember Cli Mirage,提前道歉:我对Ember(2.2.0)和Mirage都是新手,我的任务是为现有的Ember应用程序创建验收测试。我的挑战是使用幻影(0.1.13)和装置(不是工厂)来模拟数据中现有的一对多或多对多关系。我找不到任何完整的例子来模拟非平凡的关系 考虑以下简单的多对多关系:一个用户可以有多个角色 相应的余烬模型包括: // models/user.js import Ember from "ember"; import DS from 'ember-data'; export default DS

提前道歉:我对Ember(2.2.0)和Mirage都是新手,我的任务是为现有的Ember应用程序创建验收测试。我的挑战是使用幻影(0.1.13)和装置(不是工厂)来模拟数据中现有的一对多或多对多关系。我找不到任何完整的例子来模拟非平凡的关系

考虑以下简单的多对多关系:一个用户可以有多个角色

相应的余烬模型包括:

// models/user.js
import Ember from "ember";
import DS from 'ember-data';

export default DS.Model.extend({
  email: DS.attr('string'),
  //unidirectional M-M
  roles: DS.hasMany('user-role', {inverse: null})
});

// models/user-role.js
import DS from 'ember-data';

export default DS.Model.extend({
  description: DS.attr('string')
});
注意,
用户角色
是连字符的。

我尝试创建装置:

// mirage/fixtures/users.js
export default [
  {id: 1, email: 'user@email.com', roles: {userRole_ids: [1]}},
  {id: 2, email: 'supervisor@email.com', roles: {userRole_ids: [1, 2]}}
];

// mirage/fixtures/userRoles.js
export default [
  {id: 1, description: 'regular user'},
  {id: 2, description: 'supervisor'}
];

//mirage/config.js
export default function() {
  //...
  //single user data
  this.get('/users/:id', function(db, request) {
    let id = request.params.id;
    return db.users.find(id);
  });
  //...
}
当我在
finders.js中放置断点时

var payload = normalizeResponseHelper(serializer, store, typeClass, adapterPayload, id, 'findRecord');
并检查我看到的
adapterPayload
的值,例如

email: "supervisor@email.com"
id: 2
roles: Array[2]
  0: Object:
    userRole_id: 1
  1: Object:
    userRole_id: 2
而不是预期的

email: "supervisor@email.com"
id: 2
roles: Array[2]
  0: Object
    id: 1
    description: "regular user"
  1: Object
    id: 2
    description: "supervisor"
换句话说,用户角色ID外键不会被Mirage解析到相应的记录中。我怀疑这和用户角色中的连字号不匹配我对
userRoles.js
文件的命名有关

后端功能(我正在尝试模拟)是使用JAX-RS JPA和Spring框架实现的,如下所示:

// User.java
//...
@Entity
@Table(name = "User")
public class User extends BaseBizObj<User, SimplePrimaryKey<String>, UserRepository> {
    //...
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinColumn(name = "Roles")
    @NotNull
    @JsonProperty
    private Set<UserRole> roles;
    //...
}

// UserRole.java
//...
@Entity
@Table(name = "UserRole")
public class User extends BaseBizObj<User, SimplePrimaryKey<String>, UserRoleRepository> {
    //...
    @Column(name = "Description")
    @NotNull
    @JsonProperty
    private String description;
    //...
}
//User.java
//...
@实体
@表(name=“User”)
公共类用户扩展BaseBizObj{
//...
@ManyToMany(fetch=FetchType.EAGER)
@JoinColumn(name=“Roles”)
@NotNull
@JsonProperty
私人设定角色;
//...
}
//UserRole.java
//...
@实体
@表(name=“UserRole”)
公共类用户扩展BaseBizObj{
//...
@列(name=“Description”)
@NotNull
@JsonProperty
私有字符串描述;
//...
}

任何帮助都将不胜感激。

为什么这不是
{id:1,电子邮件:'user@email.com“,角色:{userRole\u id:[1]},
this
{id:1,电子邮件:”user@email.com,角色:{id:[1]},
?这正是我的问题。由于我目前的设置,幻影产生了错误的有效载荷。