Периодически возникают ситуации, когда нужно смоделировать данные различных форматов, чтобы протестировать работу приложения. Есть несколько возможностей решить задачу, и сегодня мы рассмотрим одну из них.
What is Faker?
Faker — это библиотека, которая позволяет генерировать случайные данные. С ее помощью можно заполнить таблицы в базе данных, построить корректные XML-документы, сформировать JSON-ответы для REST.
Особенности
- Наличие множества групп форматированных данных;
- Есть поддержка возврата локализованных данных, отличных от en_US;
- Можно работать с готовыми наборами данных, так называемые « хэлперы»;
- Есть возможность создавать собственных « поставщиков»;
- Можно загружать faker.js из CDN;
- Присутствует обертка для работы с CLI;
- Для ленивых есть сервис с рабочим функционалом.
Установка Faker
Установить Faker можно через менеджер зависимостей Composer:
composer require fzaninotto/faker
Установка с помощью npm:
npm install Faker
Работа с faker.js в браузере
Первым делом мы подключаем библиотеку с нужной локализацией (опционно):
<script src="https://cdnjs.cloudflare.com/ajax/libs/Faker/3.1.0/faker.js"></script>
После этого можно создать объект пользователя с данными:
<script> var user = { login: faker.internet.email(), name: faker.name.firstName(), surname: faker.name.lastName(), country: faker.address.country(), avatar: faker.image.avatar(), }
</script>
Список доступных методов: https://github.com/marak/Faker.js/#api-methods
В результате объект «user» будет содержать тестовые данные:
{
"login": "Stacey_Turner79@yahoo.com",
"name": "Ruthe",
"surname": "Dickens",
"country": "Azerbaijan",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/BrianPurkiss/128.jpg"
}
Установив локаль «ru» перед вызовом методов, можно получить результат в кириллице:
faker.locale = 'ru';
{
"login":"88@yahoo.com",
"name":"Евгения",
"surname":"Пахомова",
"country":"Ливия",
"avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/xadhix/128.jpg"
}
Значения некоторых параметров на русском языке.
Работа с хэлперами
Хэлперы (helpers) — это уже готовые объединенные наборы данных. Есть поддержка следующих наборов:
- createCard
- contextualCard
- userCard
- createTransaction
Пример вызова хэлпера транзакции:
<script> console.log(faker.helpers.createTransaction());
</script>
{
"amount": "636.00",
"date": "2012-02-01T21:00:00.000Z",
"business": "Hilll - Gorczany",
"name": "Auto Loan Account 4936",
"type": "withdrawal",
"account": "03557889"
}
Генерация данных в Node.js
Подключение библиотеки для работы в Node.js:
var faker = require('Faker');
Стоит обратить внимание на то, что в Node.js поддерживаются не все группы, методы и хэлперы, которые есть для работы в браузере.
Получить список доступных методов группы можно командой:
console.log(faker.Name);
Вывод методов для группы «name».
В результате мы получим следующие методы:
{ firstName: [Function],
firstNameFemale: [Function],
firstNameMale: [Function],
lastName: [Function],
findName: [Function] }
Также при работе стоит обратить внимание на регистр групп:
console.log("Hello " + faker.Name.findName());
Faker и PHP
Рассмотрим простой пример использования PHP-библиотеки:
<?php
require_once '../vendor/autoload.php';
$faker = Faker\Factory::create();
echo "Hi {$faker->name()}!";
Список доступных методов: https://github.com/fzaninotto/Faker#formatters
Мы получим подобный результат:
Hi Kyle Smith!
Чтобы получить данные для другой локали, достаточно передать локаль в метод «create»:
$faker = Faker\Factory::create('ru_RU');
Поставщики контента (Provider)
Базовый класс «\Faker\Factory» содержит ограниченный набор данных, который можно расширять другими «поставщиками».
Для этого нужно собрать генератор данных, указав нужных поставщиков:
<?php
require_once '../vendor/autoload.php';
$faker = new Faker\Generator();
$faker->addProvider(new Faker\Provider\ru_RU\Person($faker));
$faker->addProvider(new Faker\Provider\ru_RU\Address($faker));
$faker->addProvider(new Faker\Provider\ru_RU\Company($faker));
$user = new stdClass;
$user->name = $faker->name;
$user->address = $faker->address;
$user->company = $faker->company;
ru_RU — название русской локали.
В данном примере мы подключаем контент из групп «Person», «Address», «Company» и создаем объект «user» со случайными данными. В результате объект «user» будет содержать случайные данные:
stdClass Object
(
[name] => Розалина Фёдоровна Захарова
[address] => 257268, Ярославская область, город Москва, наб. Космонавтов, 65
[company] => ОАО СантехХоз
)
Заключение
Данная библиотека подойдет для большинства задач, связанных с генерацией случайных данных. Вы можете расширять функционал библиотеки, создавая свои поставщики и хэлперы.
Автор: Динар Мухаметшин, ведущий разработчик веб-студии «Первый БИТ»