Как стать автором
Обновить

Как быстро создавать тестовые данные без лишней рутины: библиотека @artstesh/forger

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров368

Всем нам, разработчикам, приходится сталкиваться с задачей создания тестовых данных. Это могут быть как простые объекты (например, пользователь с именем, email и ролями), так и сложные вложенные структуры: API-ответы, модели базы данных и так далее. Это особенно актуально при написании unit-тестов, когда нам нужны разнообразные данные для проверки разных сценариев.

И вот тут становится понятно, сколько времени мы тратим на эту рутину. Либо вручную создаем объекты, либо используем более простые инструменты, которые не всегда подходят для сложных проектов. Так появился инструмент — библиотека @artstesh/forger, созданная специально для таких задач, чтобы в разы сократить наше время и упростить процесс разработки. Давайте разберем, как она работает и почему это будет полезно.


Что такое @artstesh/forger и почему стоит попробовать?

Основная задача библиотеки — быстрое и удобное создание релевантных тестовых данных (особенно сложных объектов), которые полностью соответствуют типам вашего проекта. Если ранее вы создавали объекты вручную (а кто из нас этого не делал?), то знаете, как это может быть утомительно, особенно если набор данных часто меняется.

Вот почему @artstesh/forger будет полезен:

  • Она учитывает типы TypeScript и генерирует объекты автоматически.

  • Подходит как для простых моделей, так и для сложных вложенных структур.

  • Поддерживает удобную кастомизацию: можно легко задать свои условия для генерации данных.


Примеры использования

Пример 1. Генерация объекта пользователя.

Если раньше нужно было вручную создавать данные с нуля, то теперь достаточно пары строк кода:

import { Forger } from '@artstesh/forger';

interface User {
  id: number;
  name: string;
  isActive: boolean;
}

const user = Forger.create<User>();

console.log(user);
// Вывод:
// {
//   id: 42,
//   name: 'L3vbFBiw1E',
//   isActive: true
// }

Результат — готовый объект, который полностью соответствует интерфейсу User.


Пример 2. Работа с вложенными структурами.

Допустим, у нас есть чуть более сложная модель данных, например, объект, описывающий заказ:

interface Order {
  orderId: string;
  customer: {
    id: number;
    name: string;
  };
  items: Array<{
    productId: number;
    quantity: number;
  }>;
}

Создать такой объект вручную? Скучно и долго. С @artstesh/forger это делается в один момент:

const order = Forger.create<Order>();

console.log(order);
// Вывод:
// {
//   orderId: 'GE0fDsH41t',
//   customer: {
//     id: 101,
//     name: '528ks7yLf'
//   },
//   items: [
//     { productId: 305, quantity: 3 },
//     { productId: 177, quantity: 45 },
//     { productId: 408, quantity: 1 }
//   ]
// }

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


Пример 3. Кастомизация данных.

Иногда нам нужно, чтобы определенные поля соответствовали конкретным значениям (например, диапазоны чисел или специфические строки). Вот пример, как это можно сделать:

const customUser = Forger.create<User>()
  .with(t => t.id = Forger.create<number>({numberMin: 10,numberMax: 50})!)
  .with(t => t.name = 'CustomName').result();

console.log(customUser);
// Вывод:
// {
//   id: 44, // случайное значение
//   name: 'CustomName',
//   isActive: false // сгенерировано автоматически
// }

Библиотека позволяет тонко настроить генерацию данных, чтобы они соответствовали вашим сценариям.


Почему именно @artstesh/forger?

  • Экономия времени. Создавать даже сложные данные стало так же просто, как написать одну строку кода. Это очень заметно для масштабных проектов!

  • Легкость масштабирования. Один раз настроив логику генерации в проекте, можно спокойно использовать ее для создания любых объектов.

  • Учет деталей. В отличие от простых библиотек, @artstesh/forger работает с типами TypeScript, автоматически обрабатывает вложенные модели и позволяет добавить свой кастомный функционал.

  • Удобство интеграции. Библиотека отлично вписывается в популярные фреймворки для тестирования (Jasmine, Jest, Karma), так что с этим проблем не будет.


Что дальше?

Библиотека уже помогла нашей команде сэкономить уйму времени и сосредоточиться на действительно важных задачах.

Данный опус, в некотором роде, - промо, в дальнейших статьях я планирую подробнее рассказать о том, как организовывать тестирование с помощью forger. А пока, если Вас заинтересовало описание, можете посетить сайт проекта.

И дайте знать, насколько удобным оказался инструмент в вашем проекте. Я буду рад любым отзывам и предложениям.

Надеюсь, эта библиотека облегчит вашу работу так же, как она помогла мне! 😉 Желаю успешного и легкого тестирования!

Теги:
Хабы:
Всего голосов 2: ↑1 и ↓1+1
Комментарии7

Публикации

Ближайшие события