2

前もってお詫び申し上げます: 私は Ember (2.2.0) と Mirage の両方に不慣れで、既存の Ember アプリケーションの受け入れテストを作成する任務を負っています。私の課題は、Mirage (0.1.13) とフィクスチャ (ファクトリではない) を使用して、データ内の既存の 1 対多または多対多の関係を模倣することです。重要な関係をモデル化する完全な例は見つかりませんでした。

次の単純な多対多の関係を考えてみましょう。ユーザーは複数のロールを持つことができます。

それぞれの 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');

I seeの値を調べ 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 Framework を使用して実装されています。

// 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;
    //...
}

どんな助けでも大歓迎です。

4

0 に答える 0