我可能会错误地考虑模拟API,但我认为值得一提。
我正在尝试创建一个具有基本视图和详细视图的对象,例如“basic-author”和“detailed-author”。但是,我希望每个对象返回一致的数据。例如,“author_name”等属性对于basic-author和detailed-author应该是相同的。
我目前正试图通过生成作者列表并扩展它来实现这一目标:
// mirage/scenarios/default.js
server.createList('author', 20);
// mirage/config.js
this.get('/basic-author', (schema) => {
return schema.basicAuthors.all();
});
// mirage/factories/author.js
import { Factory, faker } from 'ember-cli-mirage';
export default Factory.extend({
// bunch of properties, like author_name
});
// mirage/factories/basic-author.js, mirage/factories/detailed-author.js
import Author from './author';
export default Author.extend({
});
但是,显然,这不起作用,因为所有basicAuthors都没有返回任何内容,因为数据库中没有“basic-author”。如果我尝试更改路由以返回所有作者,我的ember模型将无法工作,因为它返回了20个作者的列表,这是不正确的模型类型。
我也尝试过设置faker种子,但这会使每个项目都相同。
答案 0 :(得分:0)
实现这一目标的最佳方法是使用Factory traits。 Give the docs阅读,然后您应该可以设置如下内容:
// mirage/factories/author.js
import { Factory, trait, faker } from 'ember-cli-mirage';
export default Factory.extend({
authorName() {
return faker.name.firstName();
},
age: 10,
withDetails: trait({
email() {
return `${this.authorName}@gmail.com`;
},
ssn: 123456789
})
});
然后在tests / dev中你可以创建像这样的基本作者
server.create('author');
server.createList('author', 20);
和详细的作者是这样的:
server.create('author', 'withDetails');
server.createList('author', 20, 'withDetails');