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-523842f31890

simpleFaker може бути корисним, коли наприклад потрібно згенерувати 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 Specialist

Animal

Модуль для генерації даних про тварин:

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 crab

Color

Модуль для створення даних про кольори:

import { faker } from '@faker-js/faker';

const color = faker.color.human();
console.log(color); // yellow

Commerce

Модуль для створення інформації про комерцію та продукт:

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.00

Company

Модуль для створення даних, що асоціюються з компанією:

import { faker } from '@faker-js/faker';

const company = faker.company.name();
console.log(company); // Purdy LLC

Date

Модуль для генерації дат:

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.967Z

Phone

Модуль для створення даних, що мають відношення до телефонних номерів:

import { faker } from '@faker-js/faker';

const phoneNumber = faker.phone.number('###-##-##');
console.log(phoneNumber); // 181-75-23

Internet

Модуль для генерації інтернет даних:

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


Мітки: