Faker – популярна бібліотека, яка генерує фейкові (але наближені до реальних) дані, котрі можуть бути використані для таких речей як:
- модульне тестування
- тестування продуктивності
- наповнення даними демонстраційних версій
- робота без завершеного бекенду
Faker також доступний як бібліотека для Ruby, Java та Python. В цьому записі буде розглянуто Faker для JavaScript. Запис про Faker для Python.
Для встановлення Faker.js як Dev Dependency, за допомогою менеджера пакетів npm, слід виконати наступну команду:
npm install @faker-js/faker --save-devВ наступних прикладах, для імпорту Faker я буду використовувати синтаксис ES Modules (про налаштування ESM).
Простий приклад використання:
import { faker } from '@faker-js/faker';
const fullName = faker.person.fullName();
console.log(fullName); // Lula Schinner
const email = faker.internet.email();
console.log(email); // Vivianne_Ondricka@yahoo.comЛокалізація даних
Faker підтримує різні локалізації. При використанні стандартного екземпляра:
import { faker } з '@faker-js/faker';генерація даних за замовчуванням буде відбуватись в English локалізації. Однак Faker.ks також надає більш ніж 60 доступних локалізацій.
Наприклад, спробуємо імпортувати українську локалізацію:
import { fakerUK as faker } from '@faker-js/faker';
const fullName = faker.person.fullName();
console.log(fullName); // Магера Леся КостянтинівнаПовний перелік локалізацій доступний за посиланням: Faker.js Localization
Генерація простих даних
Faker надає simpleFaker, який можна використовувати для створення даних, що не базуються на будь-яких локалізаціях, таких як числа та рядки:
import { simpleFaker } from '@faker-js/faker';
const uuid = simpleFaker.string.uuid();
console.log(uuid); // 9db4d3cc-952e-4ced-ad93-523842f31890simpleFaker може бути корисним, коли наприклад потрібно згенерувати uuids для тестового середовища, і відсутня потреба ініціювати/завантажувати повний екземпляр Faker, який включає щонайменше 500 КБ даних локалізації.
Документація до SimpleFaker.
Генерація комплексних об’єктів
Faker здебільшого генерує значення примітиви. Але в реалістичних випадках нерідко є потреба в об’єктах, для чого можна створити фабричну функцію.
Для прикладу скористаємось TypeScript, і попередньо типізуємо модель даних для користувача. Опис моделі:
import type { SexType } from '@faker-js/faker';
type SubscriptionTier = 'free' | 'basic' | 'business';
interface User {
_id: string;
email: string;
firstName: string;
lastName: string;
sex: SexType;
subscriptionTier: SubscriptionTier;
}Функція фабрика користувачів:
import { fakerUK as faker } from '@faker-js/faker';
function createRandomUser(): User {
const sex = faker.person.sexType();
const firstName = faker.person.firstName(sex);
const lastName = faker.person.lastName(sex);
const email = faker.internet.email({ firstName, lastName });
return {
_id: faker.string.uuid(),
email,
firstName,
lastName,
sex,
subscriptionTier: faker.helpers.arrayElement(['free', 'basic', 'business']),
};
}Протестуємо функцію createRandomUser:
const user = createRandomUser();
console.log(user);Результат:
{
_id: 'aec36dcd-fd41-4dc8-956f-e431716e05f9',
email: 'Alevtina_Kovalenko5@gmail.com',
firstName: 'Алевтина',
lastName: 'Коваленко',
sex: 'female',
subscriptionTier: 'basic'
}На що слід звернути увагу:
- faker.person.sexType() – попередньо визначаємо стать User.
- Після цього, передаємо значення sex аргументом у faker.person.firstName(sex) та faker.person.lastName(sex). Це дає змогу отримати значення, в залежності від статі (що запобігає кейсам коли sex='female', а firstName - 'Петро').
- faker.internet.email – отримує аргументом попередньо згенеровані значення firstName та lastName, та створює email вже на їх основі.
- faker.helpers.arrayElement – обирає рандомний елемент з масиву значень (в моєму випадку це рівні підписок користувача).
Отримання сталих результатів
Зазвичай Faker надає різні випадкові значення кожного разу, коли він використовується:
import { fakerUK as faker } from '@faker-js/faker';
const fullName = faker.person.fullName();
console.log(fullName);
// Городоцький Ратибор Арсенійович
const newFullName = faker.person.fullName();
console.log(newFullName);
// Громико ЮліаннаДля отримання сталих результатів, слід використовувати faker.seed:
import { fakerUK as faker } from '@faker-js/faker';
faker.seed(10);
const nameOne = faker.person.fullName();
console.log(nameOne);
// Герасим Звенимирович Мазило
faker.seed(20);
const nameTwo = faker.person.fullName();
console.log(nameTwo);
// Юхно Стожар Тимофійович
faker.seed(10);
const reproduceNameOne = faker.person.fullName();
console.log(reproduceNameOne);
// Герасим Звенимирович Мазило
faker.seed(20);
const reproduceNameTwo = faker.person.fullName();
console.log(reproduceNameTwo);
// Юхно Стожар ТимофійовичЗверніть увагу на рядки faker.seed(10) та faker.seed(20), і результати котрі повертаються під час генерації даних.
Модулі даних
Faker.js поставляє обширне API з різноманітними наборами даних. Розглянемо деякі з них.
Person
Модуль для створення особистої інформації про людей:
import { faker } from '@faker-js/faker';
const fullName = faker.person.fullName();
console.log(fullName); // Patricia Robel
const job = faker.person.jobTitle();
console.log(job); // Forward Branding SpecialistAnimal
Модуль для генерації даних про тварин:
import { faker } from '@faker-js/faker';
const animal = faker.animal.type();
console.log(animal); // cat
const dog = faker.animal.dog();
console.log(dog); // Irish Terrier
const fish = faker.animal.fish();
console.log(fish); // Blue swimming crabColor
Модуль для створення даних про кольори:
import { faker } from '@faker-js/faker';
const color = faker.color.human();
console.log(color); // yellowCommerce
Модуль для створення інформації про комерцію та продукт:
import { faker } from '@faker-js/faker';
const product = faker.commerce.product();
console.log(product); // Mouse
const price = faker.commerce.price({ min: 100, max: 200, symbol: '$' });
console.log(price); // $135.00Company
Модуль для створення даних, що асоціюються з компанією:
import { faker } from '@faker-js/faker';
const company = faker.company.name();
console.log(company); // Purdy LLCDate
Модуль для генерації дат:
import { faker } from '@faker-js/faker';
const birthdate = faker.date.birthdate({ mode: 'age', min: 18, max: 65 });
console.log(birthdate); // 2005-01-25T04:13:01.967ZPhone
Модуль для створення даних, що мають відношення до телефонних номерів:
import { faker } from '@faker-js/faker';
const phoneNumber = faker.phone.number('###-##-##');
console.log(phoneNumber); // 181-75-23Internet
Модуль для генерації інтернет даних:
import { faker } from '@faker-js/faker';
const email = faker.internet.email();
console.log(email); // Earnest_Mitchell@gmail.com
const emoji = faker.internet.emoji();
console.log(emoji); // 🛩️Location
Модуль для генерації адрес і місць розташування:
import { faker } from '@faker-js/faker';
const country = faker.location.country();
console.log(country); // Croatia
const address = faker.location.streetAddress();
console.log(address); // 14279 Hillary RidgesПовний перелік доступних модулів даних за посиланням:
Faker.js Module API