我正在使用ember cli mirage为我的Ember应用程序编写一些验收测试。我成功地模拟了登录的服务器响应,但我对自己的做法并不满意。Ember cli like有路由处理器的简写,我想使用它们,但我尝试的任何东西都会抛出一个错误(除了这个解决方案)。有人能帮我重构这个响应吗?
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());
});
});发布于 2016-07-02 07:18:21
如果是多对多,您应该显式地创建一个连接记录,因为还不存在直接的m2m关系支持。
// mirage/models/user.js
import { Model, hasMany } from 'ember-cli-mirage';
export default Model.extend({
userResources: hasMany()
});
// mirage/models/resource.js
import { Model, hasMany } from 'ember-cli-mirage';
export default Model.extend({
userResources: hasMany()
});
// mirage/models/user-resource.js
import { Model, belongsTo } from 'ember-cli-mirage';
export default Model.extend({
user: belongsTo(),
resource: belongsTo()
});
test('User can login', function(assert){
let user = server.create('user');
let resources = server.createList('resource', 2),
// create the join records
resources.forEach(resource => {
server.create('user-resource', { user, resource });
});
loginUser(user.email);
andThen(() => {
assert.ok(find('a:contains("Logout")'));
assert.equal('resource.content', currentPath());
});
});如果需要模拟直接公开m2m的端点,则需要做更多的工作。但总的来说,我发现如果您的Ember应用程序公开了关系上的CRUD操作,那么公开join记录也很好。让事情变得更简单。
也就是说,幻影最终将支持m2m关系。
https://stackoverflow.com/questions/38052967
复制相似问题