Статический анализ и тестирование кода — ключевые практики для поддержания высокого качества проекта. Они помогают находить ошибки, стандартизировать код и автоматизировать процессы. В этой статье рассмотрим инструменты, подходы и принципы их интеграции.
1. Linters (Линтеры)
Что такое линтеры?
Линтеры анализируют код, выявляя стилистические или синтаксические ошибки, не требующие запуска программы.Популярные линтеры
- **ESLint** (JavaScript/TypeScript): Проверка на соответствие стилям кода и правилам. - **Stylelint** (CSS/SCSS): Анализ стилей. - **Pylint** (Python): Проверка Python-кода.Пример настройки ESLint
1. Установите ESLint: ```bash npm install eslint --save-dev ```-
Создайте конфигурационный файл:
bashnpx eslint --init
-
Пример
.eslintrc.json
:json{ "env": { "browser": true, "es2021": true }, "extends": "eslint:recommended", "parserOptions": { "ecmaVersion": 12, "sourceType": "module" }, "rules": { "indent": ["error", 2], "quotes": ["error", "single"], "semi": ["error", "always"] } }
-
Запуск проверки:
bashnpx eslint .
2. Formatters (Форматтеры)
Что это?
Форматтеры автоматически исправляют стиль кода в соответствии с заданными правилами.Популярные форматтеры
- **Prettier**: Форматирование JavaScript, HTML, CSS и других языков. - **Black**: Форматирование Python-кода.Интеграция Prettier
1. Установка: ```bash npm install prettier --save-dev ```-
Конфигурация (
.prettierrc
):json{ "singleQuote": true, "semi": true, "tabWidth": 2 }
-
Автоформатирование:
bashnpx prettier --write .
3. Builds (Сборка)
Зачем нужны сборки?
Сборка объединяет ресурсы проекта (HTML, CSS, JS, изображения) для их оптимального выполнения в браузере или сервере.Популярные инструменты
- **Webpack**: Сборка модулей JavaScript. - **Vite**: Быстрый инструмент для разработки и сборки. - **Parcel**: Простая альтернатива Webpack.Пример настройки Webpack
1. Установка: ```bash npm install webpack webpack-cli --save-dev ```-
Конфигурация (
webpack.config.js
):javascriptconst path = require('path'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') }, mode: 'production' };
-
Запуск сборки:
bashnpx webpack
4. Tests (Тесты)
Типы тестов
1. **Unit Tests** (модульные): Тестируют отдельные функции или компоненты. 2. **Integration Tests** (интеграционные): Проверяют взаимодействие между модулями. 3. **End-to-End Tests** (E2E): Тестируют весь поток приложения с точки зрения пользователя.Популярные библиотеки
- **Jest**: Модульное тестирование. - **Cypress**: E2E тестирование. - **Mocha**: Гибкая библиотека для тестов.Пример настройки Jest
1. Установка: ```bash npm install jest --save-dev ```-
Конфигурация (
jest.config.js
):javascriptmodule.exports = { testEnvironment: 'node', };
-
Пример теста:
javascript// sum.js function sum(a, b) { return a + b; } module.exports = sum; // sum.test.js const sum = require('./sum'); test('adds 1 + 2 to equal 3', () => { expect(sum(1, 2)).toBe(3); });
-
Запуск тестов:
bashnpx jest
5. Conventional Commits
Что это?
**Conventional Commits** — это соглашение об именовании коммитов, которое улучшает читаемость истории изменений и автоматизацию.Пример формата коммитов
```plaintext type(scope): краткое описание[дополнительное описание]
BREAKING CHANGE: описание
text
<h3 id="основные-типы">Основные типы</h3>
- **feat**: Добавление новой функциональности.
- **fix**: Исправление ошибок.
- **chore**: Обновления без изменения функционала (например, настройки).
- **docs**: Изменения в документации.
<h3 id="интеграция">Интеграция</h3>
1. Используйте **Commitlint** для проверки коммитов.
```bash
npm install @commitlint/{config-conventional,cli} --save-dev
- Конфигурация (
commitlint.config.js
):javascriptmodule.exports = { extends: ['@commitlint/config-conventional'], };
Итоговые вопросы для подготовки
- Чем линтер отличается от форматтера?
- Какие инструменты используются для сборки проекта?
- Какие типы тестов бывают, и как они различаются?
- Как Conventional Commits помогают в разработке?
- Как настроить связку линтеров, тестов и сборки?
Совет: Интегрируйте все инструменты в CI/CD пайплайн, чтобы автоматизировать их выполнение при каждом коммите или пул-реквесте.