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