Ember Mirage 模型:对于多个 hasMany 和 belongsTo
Ember Mirage Model : For multiple hasMany and belongsTo
我有一个页面有多个 AJAX 对服务器的调用。现在,我正在使用 Mirage 模拟数据以进行测试。为此,我正在使用工厂。
我有页面渲染期间使用的所有模型的工厂。所有模型都有很多关系,少数模型有 hasMany 和 belongsTo,其他模型只有 hasMany。
我在网上遇到了使用 aftercreate 挂钩来进行此类关联。
我的疑问是:
海市蜃楼中的模型 author.js 有:
author: hasMany('post'),
afterCreate(a, server) {
server.create('b', {a});
}
同样,海市蜃楼中的模型post.js有:
author: belongsTo(),
aftercreate(b, server) {
server.create('a', {post});
}
我的疑惑是,会不会是递归调用,每次afterCreate hook之后,另一个模型正在实例化,同时调用另一个afterCreate等等?
用 mirage 处理这类关系问题的最佳方法是什么?
提前致谢!
根据每次测试中的数据需求,您可以使用 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 ] });
}
}
});
这基本上就是说,任何时候你创建一个 post
,如果你没有输入作者,它就会创建一个。这是有道理的,因为 post 没有作者就不可能存在。
但作者可以没有 post。在某些测试中,您可能只需要一个作者,而不必担心创建 post 的问题。该特征让您可以同时做到:
server.create('author'); // just an author
server.create('author', 'withPosts'); // an author with posts
现在您可以更灵活地根据测试需要为模拟数据库设置种子。
希望对您有所帮助!
我有一个页面有多个 AJAX 对服务器的调用。现在,我正在使用 Mirage 模拟数据以进行测试。为此,我正在使用工厂。
我有页面渲染期间使用的所有模型的工厂。所有模型都有很多关系,少数模型有 hasMany 和 belongsTo,其他模型只有 hasMany。
我在网上遇到了使用 aftercreate 挂钩来进行此类关联。
我的疑问是:
海市蜃楼中的模型 author.js 有:
author: hasMany('post'),
afterCreate(a, server) {
server.create('b', {a});
}
同样,海市蜃楼中的模型post.js有:
author: belongsTo(),
aftercreate(b, server) {
server.create('a', {post});
}
我的疑惑是,会不会是递归调用,每次afterCreate hook之后,另一个模型正在实例化,同时调用另一个afterCreate等等?
用 mirage 处理这类关系问题的最佳方法是什么?
提前致谢!
根据每次测试中的数据需求,您可以使用 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 ] });
}
}
});
这基本上就是说,任何时候你创建一个 post
,如果你没有输入作者,它就会创建一个。这是有道理的,因为 post 没有作者就不可能存在。
但作者可以没有 post。在某些测试中,您可能只需要一个作者,而不必担心创建 post 的问题。该特征让您可以同时做到:
server.create('author'); // just an author
server.create('author', 'withPosts'); // an author with posts
现在您可以更灵活地根据测试需要为模拟数据库设置种子。
希望对您有所帮助!