test-setup.js
Обзор
Файл test-setup.js представляет собой простой скрипт на Node.js, предназначенный для проверки корректности настройки инструментов обеспечения качества кода в проекте. Скрипт последовательно запускает набор команд, связанных с проверкой кода: компиляцию TypeScript, проверку качества кода линтером ESLint, форматирование с помощью Prettier, запуск юнит-тестов и сборку проекта. Цель — убедиться, что все этапы проходят без ошибок, что свидетельствует о правильной конфигурации среды разработки и качестве кода.
Скрипт выводит в консоль результаты каждого этапа, а также итоговую статистику успешных и неуспешных проверок. Если все проверки прошли успешно — скрипт сообщает об этом, иначе рекомендует запустить автоматическое исправление проблем и завершает работу с ошибкой.
Подробное описание
Основные переменные и константы
const { execSync } = require('child_process');
Импорт функцииexecSyncиз модуляchild_processдля синхронного выполнения команд оболочки.tests— массив объектов, каждый из которых описывает отдельную проверку качества кода:name(string) — название теста (например, "TypeScript compilation").command(string) — команда для запуска в консоли.emoji(string) — эмодзи для визуального выделения этапа.
passed— счётчик успешно пройденных тестов.failed— счётчик проваленных тестов.
Основной код
Цикл for...of последовательно перебирает каждый тест из массива tests:
for (const test of tests) {
try {
console.log(`${test.emoji} Running: ${test.name}...`);
execSync(test.command, { stdio: 'pipe' });
console.log(`✅ ${test.name} - PASSED\n`);
passed++;
} catch (error) {
console.log(`❌ ${test.name} - FAILED`);
console.log(` Error: ${error.message.split('\n')[0]}\n`);
failed++;
}
}
Для каждого теста выводится сообщение о начале выполнения.
Запускается команда через
execSyncс опцией{ stdio: 'pipe' }, благодаря чему вывод команды не отображается в консоли (чтобы не засорять логи).Если команда завершается успешно (код возврата 0), увеличивается счётчик
passedи выводится сообщение об успехе.В случае ошибки (например, команда возвращает ненулевой код) происходит отлов исключения, выводится сообщение об ошибке и увеличивается счётчик
failed.
После выполнения всех тестов скрипт выводит итоговую статистику:
console.log('📊 Results:');
console.log(`✅ Passed: ${passed}`);
console.log(`❌ Failed: ${failed}`);
Если не было ни одного провала (failed === 0), скрипт сообщает, что все проверки пройдены, и среда готова к использованию. В противном случае предлагается запустить команду npm run quality:fix для автоматического исправления проблем, и скрипт завершает процесс с кодом ошибки 1:
if (failed === 0) {
console.log('\n🎉 All quality checks passed successfully!');
console.log('Setup is ready to use.');
} else {
console.log('\n⚠️ Some checks failed.');
console.log('Run npm run quality:fix to fix issues.');
process.exit(1);
}
Важные детали реализации
Использование
execSyncвместо асинхронных вызовов упрощает логику: проверки выполняются последовательно, и результат следующей проверки зависит от успешного завершения предыдущей.Опция
stdio: 'pipe'скрывает детальный вывод команд, что делает лог более компактным и читаемым. При ошибке выводится только первая строка сообщения об ошибке.Эмодзи в сообщениях помогают визуально разделять этапы и делают вывод более дружелюбным.
Скрипт предназначен для запуска из командной строки (
#!/usr/bin/env node), что позволяет использовать его как исполняемый файл в средах Unix-подобных систем.
Взаимодействие с другими частями проекта
Скрипт зависит от наличия в
package.jsonразделаscripts, где должны быть определены команды:type-check— проверка компиляции TypeScriptlint— запуск ESLintformat— запуск Prettiertest— запуск юнит-тестов (например, Jest)build— сборка проекта
При неудачных проверках скрипт рекомендует команду
npm run quality:fix, которая должна быть прописана для автоматического исправления проблем (например, автоформатирование и исправление линтинга).Используется в процессе локальной разработки для быстрой проверки корректности настроек и качества кода перед коммитом или деплоем.
Пример использования
$ node test-setup.js
🧪 Testing code quality setup...
🔍 Running: TypeScript compilation...
✅ TypeScript compilation - PASSED
🧹 Running: ESLint check...
✅ ESLint check - PASSED
💅 Running: Prettier formatting...
✅ Prettier formatting - PASSED
🧪 Running: Tests...
✅ Tests - PASSED
🏗️ Running: Build...
✅ Build - PASSED
📊 Results:
✅ Passed: 5
❌ Failed: 0
🎉 All quality checks passed successfully!
Setup is ready to use.
Диаграмма структуры
flowchart TD
A[Start: Запуск test-setup.js]
A --> B{Перебор тестов tests[]}
B -->|для каждого теста| C[Выполнение команды execSync(test.command)]
C --> D{Результат выполнения}
D -->|Успех| E[Вывод сообщения об успехе]
D -->|Ошибка| F[Вывод сообщения об ошибке]
E --> B
F --> B
B --> G[Подсчёт passed и failed]
G --> H{failed === 0?}
H -->|Да| I[Вывод успешного завершения]
H -->|Нет| J[Вывод рекомендации и exit(1)]
I --> K[Завершение скрипта]
J --> K
Итог
Файл test-setup.js — это удобный и лаконичный инструмент для проверки и контроля качества кода на всех основных этапах разработки. Его использование помогает выявить проблемы с типизацией, стилем, тестами и сборкой на ранних стадиях, обеспечивая стабильность и поддерживаемость проекта. Благодаря простоте и читаемости, скрипт легко адаптируется и расширяется под нужды конкретного проекта.