Генерирование фейковых данных для вашего JavaScript-приложения с помощью Faker

https://scotch.io/tutorials/generate-fake-data-for-your-javascript-applications-using-faker
  • Перевод
Для того, чтобы продемонстрировать работу приложения, нам частенько приходится заставлять его работать с выдуманными данными, ведь негоже, чтобы заголовки были пустыми, а таблицы лишь расчерченными, но не заполненными.

Как правило, при создании приложения, мы не очень-то переживаем о том, c какими именно данными в итоге оно будет работать, мы просто выдумываем какой-то пример, которого достаточно для того, чтобы продолжать работать над логикой, и, собственно, продолжаем работать над логикой.

К счастью, Marak создал опрятное средство, которое позволяет нам генерировать фейковые данные на лету: Faker.

Начнем с небольшого примера


Допустим, нам нужно на лету создать пользователя. Мы хотим, чтобы у него было имя, почта, адрес, биография и даже аватар.

Что позволяет нам делать Faker:

var user = {
  name: faker.name.findName(),
  email: faker.internet.email(),
  address: faker.address.streetAddress(),
  bio: faker.lorem.sentence(),
  image: faker.image.avatar()
};

Все. Теперь у нас есть полноценный пользователь, в образе объекта, который обладает всеми желаемыми свойствами:

{
  "name": "Adaline Carroll",
  "email": "Albina.Ledner@gmail.com",
  "address": "545 Fritsch Locks",
  "bio": "dolorem officiis doloribus ut",
  "image": "https://s3.amazonaws.com/uifaces/faces/twitter/joelhelin/128.jpg"
}

Теперь мы можем делать с нашим пользователем все, что угодно, в любой части программы, не имея дел с базой данных, которую надо было бы заселять вручную. Дальше я расскажу вам о некоторых интересных особенностях Faker.

Использование Faker


Вы можете работать с Faker как в браузере, так и на сервере с помощью Node.
Следуя документации разберемся с тем, как его настроить и установить.

Подключение к странице


<!-- LOAD FAKER -->
  <script src="faker.js">

  <script>
    var name = faker.name.findName();
    var randomEmail = faker.internet.email();
  </script>


Работа в Node


  var faker = require('faker');

  var name = faker.name.findName();
  var randomEmail = faker.internet.email();

Вот и все. Давайте посмотрим, с какими еще данными мы можем рабоать.

Данные Faker


Список данных, которые Faker может сгенерировать для нас, достаточно велик. Вот основной:
  • name
  • address
  • phone
  • internet
  • company
  • image
  • lorem
  • helpers
  • date
  • random
  • hacker

Каждый из пунктов имеет много подпунктов и настроек. Например:
  • name
    • firstName
    • lastName
    • findName
    • prefix
    • suffix


К каждому свойству можно обратиться с помощью функции:
  // Chris
  var firstName = faker.name.firstName();

  // Sevilleja
  var lastName = faker.name.lastName();

  // Chris Sevilleja
  var findName = faker.name.findName();

  // Mr.
  var prefix = faker.name.prefix();

  // PhD
  var suffix = faker.name.suffix();

Полный список данных описанием, с которыми позволяет работать Faker, можно изучить здесь.

«Хэлперы»


Также для множества категорий данных Faker предоставляет набор «хелперов», которые призваны еще больше упростить работу. Вместо того, чтобы извлекать содержимое из одного поля, а потом браться за другое, «хэлперы» позволяют работать с готовыми, объединенными наборами данных.
Приведу несколько примеров.

fakers.helpers.contextualCard()


Готовый набор данных о пользователе, который включает в себя имя, фамилию, почту, адрес и аватар:
{
  "name": "Kaleigh",
  "username": "Kaleigh60",
  "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/mbilderbach/128.jpg",
  "email": "Kaleigh6047@gmail.com",
  "dob": "1961-08-07T02:37:45.068Z",
  "phone": "113.601.0680",
  "address": {
    "street": "Myah Course",
    "suite": "Apt. 657",
    "city": "Boyerberg",
    "zipcode": "66413-8920",
    "geo": {
      "lat": "-44.6203",
      "lng": "16.7454"
    }
  },
  "website": "megane.biz",
  "company": {
    "name": "Little-Reinger",
    "catchPhrase": "Enhanced regional emulation",
    "bs": "interactive generate bandwidth"
  }
}


fakers.helpers.userCard()


Сокращенный набор данных, но включающий в себя аватар:

{
  "name": "George Kohler",
  "username": "Emilio_Grady49",
  "email": "Aurore_Wintheiser90@gmail.com",
  "address": {
    "street": "Corwin Cove",
    "suite": "Suite 550",
    "city": "New Myah",
    "zipcode": "57817",
    "geo": {
      "lat": "-3.4045",
      "lng": "-16.7806"
    }
  },
  "phone": "1-806-338-0724 x844",
  "website": "katheryn.net",
  "company": {
    "name": "Purdy, Lesch and Jacobi",
    "catchPhrase": "Programmable incremental frame",
    "bs": "24/365 optimize initiatives"
  }
}


fakers.helpers.createTransaction()



{
  "amount": "757.24",
  "date": "2012-02-02T08:00:00.000Z",
  "business": "Bahringer Group",
  "name": "Home Loan Account 5279",
  "type": "deposit",
  "account": "63843216"
}


faker.helpers.createCard()


Полный набор данных о пользователе, включая posts, необходимый для симуляции записей в блоге:

{
  "name": "Fern Ritchie",
  "username": "Vladimir.Feest",
  "email": "Llewellyn_Robel@gmail.com",
  "address": {
    "streetA": "Ratke Street",
    "streetB": "431 Terry Prairie",
    "streetC": "027 Tyler Plaza Apt. 166",
    "streetD": "Apt. 095",
    "city": "Crooksstad",
    "state": "New Hampshire",
    "country": "Ukraine",
    "zipcode": "53303",
    "geo": {
      "lat": "-5.9355",
      "lng": "20.5942"
    }
  },
  "phone": "477-849-4756 x71564",
  "website": "emile.org",
  "company": {
    "name": "Stehr Inc",
    "catchPhrase": "Universal 6th generation contingency",
    "bs": "granular whiteboard bandwidth"
  },
  "posts": [{
    "words": ["voluptatem", "quia", "ipsam"],
    "sentence": "maxime et nemo et sed",
    "sentences": "blanditiis sint molestiae facilis\net molestiae velit consequatur sit aut iure nihil\neaque quo voluptatibus",
    "paragraph": "reiciendis exercitationem assumenda provident odio\nasperiores fugit officia\nperferendis exercitationem a\nnam et ea\na ex autem ducimus\nsint tenetur officia ratione nesciunt impedit qui"
  }, {
    "words": ["voluptatem", "fugiat", "laborum"],
    "sentence": "quis vel consequatur placeat eum voluptas laboriosam",
    "sentences": "natus ut assumenda esse rerum repudiandae\ntempore excepturi nemo et velit inventore minus nihil officiis\nexcepturi corrupti enim explicabo quaerat",
    "paragraph": "sint eum tenetur id occaecati\nitaque veritatis aperiam libero quibusdam repudiandae explicabo accusamus rerum inventore\net placeat enim\ndolor sit dolores nulla doloribus"
  }, {
    "words": ["illum", "quia", "voluptas"],
    "sentence": "libero eos quia velit qui sint aut",
    "sentences": "eligendi esse blanditiis magni perferendis cumque quibusdam qui iste vitae\naliquam odio aut quaerat\nveritatis consequatur qui consequuntur",
    "paragraph": "qui facere ex et consequatur\nut iusto maxime quia deleniti sint aut\nut inventore magni ipsum necessitatibus et numquam qui consectetur aperiam\nnam non quisquam tempore corporis adipisci nobis rem\nqui doloribus inventore itaque est corrupti modi vero quidem quaerat"
  }],
  "accountHistory": [{
    "amount": "435.13",
    "date": "2012-02-02T08:00:00.000Z",
    "business": "Dare Inc",
    "name": "Home Loan Account 4225",
    "type": "payment",
    "account": "69883581"
  }, {
    "amount": "993.77",
    "date": "2012-02-02T08:00:00.000Z",
    "business": "Yundt, VonRueden and Marks",
    "name": "Credit Card Account 2737",
    "type": "withdrawal",
    "account": "32957725"
  }, {
    "amount": "844.46",
    "date": "2012-02-02T08:00:00.000Z",
    "business": "Sipes-Boyer",
    "name": "Investment Account 5882",
    "type": "deposit",
    "account": "50708763"
  }]
}


Использование шаблона Node API


Мы можем быстро создать Node API, которое будет возвращать фейковые данные. В этом примере конечным результатом работы с API будет возврат пользовательских данных:
app.get('/api/user', function(req, res) {
  res.json({
    name: faker.name.findName(),
    email: faker.internet.email(),
    address: faker.address.streetAddress(),
    bio: faker.lorem.sentence(),
    image: faker.image.avatar()
  };
});

После того, как сервер будет запущен, результат работы API отобразится Postman'ом; как мы видим, это данные в формате JSON:image

Выводы


Надеюсь, что Faker упростит создание приложений, некоторым разработчикам. Этот пакет позволяет с легкостью генерировать данные и организовывать работу через API. Также рекомендуя посетить официальный сайт проекта, там вы найдете много интересного и сможете оценить объем данных, которыми позволяет манипулировать Faker.
  • +13
  • 13,1k
  • 9
Поделиться публикацией
Комментарии 9
    0
    Здорово, и название смешное. Вот только тестовый домен изолируется, чтобы ничего не текло на gmail и прочие ресурсы. В тестовом домене поднимаются необходимые сервисы, которые бонусом еще имеют и фидбек в систему тестов.
      0
      Эту штуку еще удобно в связке с rosie использовать для этих целей.
        0
        Если оно генерит только одну «строку»/«документ», мой выбор — www.json-generator.com ( habrahabr.ru/post/132286/ )
          0
          Никто не мешает использовать циклы ;)
            0
            json generator только как онлайн сервис предоставляется? Не нашел сорцов.
            0
              0
              полезная статья, спасибо.
              сразу 3 генератора:
              • faker — не плох если нужна локализация
              • chance — набирает обороты и умеет генерировать некоторые специфические вещи: Mobile section к примеру
              • json generator — приятный синитаксис


              Не увидел ни в одном генераторе возможность впихнуть свой набор данных для определенного типа. К примеру имена хочу генерировать только из диапазона [Вася, Петя, Маша], казалось бы — полезная фича была бы, но никто не сделал. Весь набор данных уже вшит в либы.
                +1
                chancejs.com/#helpers

                самый простой вариант
                >> chance.pick(array, count)
                Given an array, pick a random element and return it

                или

                >>chance.set(key, value)
                Used for overriding the default data used by Chance.
                  0
                  Спасибо, не заметил в доке

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое