Как заполнить базу данных один раз несколькими представлениями для согласованных данных - PullRequest
0 голосов
/ 14 мая 2018

Возможно, я неправильно думал о ложных API, но я подумал, что стоит спросить.

Я пытаюсь создать объект с базовым и подробным представлениями, например, «basic-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 авторов, что является неправильным типом модели., но это делает каждый предмет одинаковым.

1 Ответ

0 голосов
/ 14 мая 2018

Лучший способ сделать это - использовать заводские черты. Прочитайте документы , тогда вы сможете настроить что-то вроде этого:

// 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
  })

});

Затем в тестах / dev вы можете создать основных авторов, подобных этому

server.create('author');
server.createList('author', 20);

и подробные авторы, как это:

server.create('author', 'withDetails');
server.createList('author', 20, 'withDetails');
...