TGViewer
PRO автотесты PRO автотесты @test_automation_pro · 311 subscribers
Post #29 232
Генератор стабов из TypeScript-типов

Когда тестируешь компонент — надо откуда-то взять данные, которые он показывает. Обычно это ответ сервера: объект с десятками полей. Для теста из них важны два-три поля, а заполнить нужно все, иначе либо сборка упадёт, либо компонент выдаст ошибку при запуске теста. Если задавать данные в коде, то будет простыня значений, в которой трудно понять, какие поля важны для теста, а какие — просто чтобы тип сошёлся.

Для решения этой проблемы я сделал инструмент — ts-stub-gen. Он читает типы проекта и для каждого типа генерирует хелпер — функцию, которая возвращает объект со всеми заполненными полями. При вызове можно передать параметром набор значений, которые важны для этого конкретного теста, а остальные поля заполняются значениями по умолчанию.

Было:
const response: Response = {
requestId: "r-1",
status: "ok",
pagination: { page: 1, perPage: 20, total: 1 },
account: { id: "42", balance: 100, tags: [], createdAt: new Date(0) },
};


Стало:
const response = GetStubResponse({
account: GetStubAccount({ balance: 100 }),
});


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

Мы уже внедрили ts-stub-gen в своём проекте и, благодаря этому, удалили файлы с кодом создания тестовых данных — их приходилось править после каждого изменения модели.

Вы можете поставить ts-stub-gen в свой проект и попробовать, как он работает:
npm install -D ts-stub-gen
# создать ts-stub-gen.config.json: откуда брать типы, куда положить хелперы
npx ts-stub-gen


Документация: https://dima117.github.io/ts-stub-gen
dima117.github.io ts-stub-gen Стабы данных для тестов из типов TypeScript
  • 🔥 16
  • 👍 2
  • ❤ 1
  • 💯 1
More from @test_automation_pro
  1. Jul 30, 2026photo post
  2. Jul 30, 2026В субботу я читал лекцию об автотестах в Школе разработки интерфейсов Яндекса. В этом году…
  3. Jul 18, 2026https://youtu.be/EZXj-bTG82w На прошлой неделе я был в гостях у Володи Гриненко и мы запис…
  4. Jun 28, 2026Скоро начало 3 квартала и в Яндекс 360 идет квартальное планирование. Два сервиса запланир…
  5. May 21, 2026Еще один случай с участием #ии Мы сегодня обнаружили тест, который проходил успешно, но не…
  6. May 14, 2026photo post
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →