无法与Ember Mirage建立关系

时间:2017-10-17 16:35:39

标签: ember.js ember-data ember-cli-mirage

我正在为使用EmberJS编写的应用程序编写测试。我正在使用幻影。 我有以下两种模式:

蜃/模型/ paperwork.js

export default Model.extend({
customer: belongsTo('customer'),
paperwork_products: hasMany('paperwork-product', { inverse: 'paperwork' }),

蜃/模型/文书工作-product.js

export default Model.extend({
paperwork: belongsTo('paperwork', { inverse: 'paperwork_products' }),
});

在我的场景中,我正在创建这样的数据:

const paperwork = server.create('paperwork');                                                                                   
const paperworkProduct = server.create('paperwork-product', { paperwork });                      
paperwork.paperwork_products.add(paperworkProduct);

我的路线:

export default ApplicationRoute.extend({
    model(params) {
        return this.store.findRecord('paperwork', params.paperwork_id, { include: 'paperwork_products' }),        
    },
});

问题是我无法在模板中访问paperwork.paperwork_products。这是未定义的(其他文书工作属性在这里,但不是关系)。当声明路由时,我甚至已经尝试在我的mirage / config.js中放置一个调试器。我的文书工作存在,他的“文书工作产品”也存在。但我无法在模板中获取paperwork_products数据。 我究竟做错了什么 ?我想我必须改变一些事情:

this.get('v1/paperworks/:id');

但我不知道是什么...... 提前谢谢!

编辑:这是我真正的Ember模特:

模型/ paperwork.js

export default DS.Model.extend({
    customer: DS.belongsTo('customer'),
    paperwork_products: DS.hasMany('paperwork-product', { async: true }),
});

模型/文书工作-product.js

export default DS.Model.extend({
  paperwork: DS.belongsTo('paperwork'),
});

昨天我试图比较我背后的真实JsonApi响应和Mirage响应,我看到在关系哈希中,我的关系“paperwork_products”被改为文书产品(使用幻影)。因此,与下划线或带有破折号的模型的关系存在问题... 在config.js中,我试图模拟JSONAPI Backend,它运行良好。刚刚用“paperwork_products”取代“文书产品”

幻影回复:

"relationships":{  
    "customer":{  
        "data":{  
            "type":"customers",
            "id":"1"
        }
    },
    "paperwork-products":{  
        "data":[  
            {  
                "type":"paperwork-products",
                "id":"1"
            }
        ]
    }
}

应该是:

"relationships":{  
    "customer":{  
        "data":{  
            "type":"customers",
            "id":"1"
        }
    },
    "paperwork_products":{  
        "data":[  
            {  
                "type":"paperwork_products",
                "id":"1"
            }
        ]
    }
}

我与hasMany关系的其他模型没有任何问题。

1 个答案:

答案 0 :(得分:0)

要确认,您是否设置了具有相同关系的Ember Data模型?没有这些,事情可能会发生它工作得很好......

如果你这样做,你也可以发布这些模型吗?

此外,作为一个FYI,Mirage 0.3.0附带一个自动同步设置,可以读取您的Ember Data模型并创建相应的Mirage模型而无需任何工作。这很可爱......

编辑: 我建议你重新修改你的Ember Data模型以使用驼峰关系。如果您执行以下操作:

模型/ paperwork.js

export default DS.Model.extend({
    customer: DS.belongsTo('customer'),
    paperworkProducts: DS.hasMany('paperwork-product', { async: true }),
});

我希望它可以毫无问题地工作,因为Ember Data会自动将camelCased关系转换为相应的JSON-API密钥

这对你有用吗?