提前道歉:我是 Ember (2.2.0) 和 Mirage 的新手,我的任务是为现有的 Ember 应用程序创建验收测试。我的挑战是使用 Mirage(0.1.13)和固定装置(不是工厂)来模拟我们数据中现有的一对多或多对多关系。我找不到任何模拟非平凡关系的完整示例。
考虑以下简单的多对多关系: 一个用户可以有多个角色。
各自的 Ember 模型是:
// 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')
});
请注意,它 user-role
是连字符的。
我尝试创建固定装置:
// 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
I see 的值,例如,
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"
换句话说,Mirage 不会将用户角色 ID 外键解析到其相应的记录中。我怀疑它与用户角色中的连字符不匹配我的 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;
//...
}
任何帮助将不胜感激。