首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mirage 0.2.x中重构mock响应

在mirage 0.2.x中重构mock响应
EN

Stack Overflow用户
提问于 2016-06-27 19:37:22
回答 1查看 150关注 0票数 0

我正在使用ember cli mirage为我的Ember应用程序编写一些验收测试。我成功地模拟了登录的服务器响应,但我对自己的做法并不满意。Ember cli like有路由处理器的简写,我想使用它们,但我尝试的任何东西都会抛出一个错误(除了这个解决方案)。有人能帮我重构这个响应吗?

代码语言:javascript
复制
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
      }
    };
  }
});

我同时定义了用户和资源模型以及工厂,并在用户和资源模型中定义了它们之间的关系(这是多对多关系)。下面是我如何在测试中创建用户

代码语言:javascript
复制
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());
  }); 
});
EN

回答 1

Stack Overflow用户

发布于 2016-07-02 07:18:21

如果是多对多,您应该显式地创建一个连接记录,因为还不存在直接的m2m关系支持。

代码语言:javascript
复制
// 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关系。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38052967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档