【发布时间】:2016-06-27 11:37:22
【问题描述】:
我正在使用 ember cli mirage 为我的 Ember 应用程序编写一些验收测试。我成功地模拟了登录的服务器响应,但我不高兴我是怎么做到的。 Ember cli mirage 有路由处理程序的简写,我想使用它们,但我尝试的一切都会引发错误(除了这个解决方案)。有人可以帮我重构这个响应吗?
this.post('/login', ({ users, resources })=> {
let user = users.first();
if(!Ember.isEmpty(resources.first())){
return {
data: {
type: 'user',
id: user.id,
attributes: user,
relationships: {
resources: {
data: [
{ id: resources.first().id, type: 'resource' }
]
}
}
},
};
} else {
return {
data: {
type: 'user',
id: user.id,
attributes: user
}
};
}
});
我定义了用户和资源模型以及工厂,它们之间的关系在用户和资源模型中(这是多对多的关系)。这是我在测试中创建用户的方式
test('User can login', function(assert){
let resources = server.createList('resource', 2),
user = server.create('user', {resources: resources});
loginUser(user.email);
andThen(()=>{
assert.ok(find('a:contains("Logout")'));
assert.equal('resource.content', currentPath());
});
});
【问题讨论】:
-
第二部分你可以直接返回用户,Mirage 会自动通过序列化层:
return user;至于第一部分,Mirage 中的 m2m 关系故事有点缺乏,所以可能你这里的方法是目前最直接的方法。 -
@KoriJohnRoys 谢谢。
标签: javascript ember.js ember-cli-mirage