javascript - Ember 幻影模型 : For multiple hasMany and belongsTo

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

我的页面有多个对服务器的 AJAX 调用。现在,我正在使用 Mirage 模拟数据以进行测试。为此,我正在使用工厂。

我有用于页面渲染期间使用的所有模型的工厂。所有模型都有很多关系,少数模型有 hasMany 和 BelongsTo,其他模型只有 hasMany。

我在网上发现使用 aftercreate Hook 来进行此类关联。

我的疑问是:

海市蜃楼中的模型author.js具有:

author: hasMany('post'),
afterCreate(a, server) {
   server.create('b', {a});
}

类似地,mirage 中的模型 post.js 具有:

author: belongsTo(),
aftercreate(b, server) {
   server.create('a', {post});
}

我的疑问是,这不是递归调用吗,在每个afterCreate钩子(Hook)之后,另一个模型被实例化,并同时调用另一个afterCreate等等?

处理此类海市蜃楼关系问题的最佳方法是什么?

提前致谢!

最佳答案

根据您在每次测试中的数据需求,您可以使用traits在这里给你更多的控制权。这是您可以做到的一种方法:

// factories/author.js
import { Factory, trait } from 'ember-cli-mirage';

export default Factory.extend({

  name: 'Author name',

  withPosts: trait({

    afterCreate(author, server) {
      server.createList('post', 3, { author });
    }

  })

});

// factories/post.js
import { Factory, trait } from 'ember-cli-mirage';

export default Factory.extend({

  title: 'My first blog post',

  afterCreate(post, server) {
    if (!post.author) {
      server.create('author', { posts: [ post ] });
    }
  }

});

这基本上是说,每当您创建一个帖子时,如果您没有传入作者,它就会创建一个。这是有道理的,因为没有作者就不可能存在帖子。

但是作者可以在没有帖子的情况下存在。在某些测试中,您可能只需要一个作者,并且不想担心创建帖子。该特性可以让你同时做到这两点:

server.create('author'); // just an author
server.create('author', 'withPosts'); // an author with posts

现在您可以更灵活地根据测试的需要为模拟数据库提供种子。

希望有帮助!

关于javascript - Ember 幻影模型 : For multiple hasMany and belongsTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44831076/

相关文章:

javascript - "Security Err: Dom Exception"嵌套ajax调用时抛出

ember.js - 在 ember.js 中引导数据

ember.js - JSON API 响应和 ember 模型名称

javascript - 使用 Promises 对 Ember 对象数组进行排序

ember.js - 从嵌入对象访问父记录

javascript - angularjs 国家代码通过 $http 请求从 jsonfile 中查找

javascript - 如何使用 SonarQube 分析源和测试位于同一目录中的项目

javascript - d3js多图自动更新

javascript - 在 Ember 集成测试期间调试渲染的 HTML 和代码

ember.js - 如何在我的Ember项目中使用SASS和SCSS