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

时间:2016-04-19 10:50:05

标签: ember.js relationships acceptance-testing ember-cli-mirage

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

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

各自的Ember型号是:

df1 <- structure(list(from = c("A", "2", "3", "F", "C", "D", "6"), 
 to = c("1", 
"A", "B", "B", "4", "5", "6")), .Names = c("from", "to"), 
 class = "data.frame", row.names = c(NA, -7L))

请注意,// 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

而不是预期的

email: "supervisor@email.com"
id: 2
roles: Array[2]
  0: Object:
    userRole_id: 1
  1: Object:
    userRole_id: 2

换句话说,Mirage没有将用户角色ID外键解析为其相应的记录。我怀疑它与用户角色中的连字符无法匹配email: "supervisor@email.com" id: 2 roles: Array[2] 0: Object id: 1 description: "regular user" 1: Object id: 2 description: "supervisor" 文件的命名。

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

userRoles.js

非常感谢任何帮助。

0 个答案:

没有答案