Naming conventions

Правильное именование тестов и файлов в проекте, использующем Karma, играет ключевую роль в поддерживаемости, читаемости и автоматизации тестирования. Неправильные или непоследовательные имена могут усложнить поиск ошибок, отладку и интеграцию с CI/CD.

Именование файлов тестов

Файлы с тестами рекомендуется именовать так, чтобы сразу было понятно, какой модуль или функциональность они проверяют. Наиболее распространённые подходы:

  • Использование суффикса .spec.js Пример: mathUtils.spec.js, userService.spec.js Этот подход делает очевидным, что файл содержит тесты, и совместим с большинством инструментов сборки и конфигураций Karma.

  • Использование суффикса .test.js Пример: mathUtils.test.js, userService.test.js Альтернатива .spec.js, чаще встречается в проектах с Jest, но также полностью поддерживается Karma.

  • Разделение по папкам Обычно структура тестов отражает структуру исходного кода:

    src/
      utils/
        mathUtils.js
    test/
      utils/
        mathUtils.spec.js

    Такой подход облегчает навигацию и поддерживает ясность проекта при росте количества тестов.

Именование describe-блоков

describe используется для группировки связанных тестов. Название блока должно описывать функциональность или модуль, который тестируется.

Примеры хороших практик:

describe('MathUtils', () => {
  describe('add function', () => {
    it('должна корректно складывать два положительных числа', () => { ... });
    it('должна корректно складывать отрицательные числа', () => { ... });
  });
});

Ключевые моменты:

  • Название должно быть существительным, обозначающим модуль или объект.
  • Для методов лучше использовать describe('имяМетода'), а не describe('тест метода').
  • Для более сложных модулей можно использовать вложенные describe, чтобы отражать структуру функций.

Именование it-блоков

it описывает конкретное поведение или сценарий. Название должно формулироваться как завершённое предложение, отражающее результат работы функции.

Примеры:

it('возвращает true, если число положительное', () => { ... });
it('генерирует ошибку при некорректном входном значении', () => { ... });

Рекомендации:

  • Использовать глаголы, указывающие на действие (возвращает, генерирует, вызывает).
  • Описывать конкретный результат, а не процесс тестирования.
  • Избегать сокращений и аббревиатур, которые могут быть непонятны другим разработчикам.

Конвенции для асинхронных тестов

Если используется async/await или промисы, стоит явно указывать это в названии сценария, чтобы сразу понимать контекст:

it('асинхронно загружает данные с сервера и возвращает объект', async () => { ... });

Именование переменных внутри тестов

  • sut (System Under Test) — часто используется для объекта или функции, которую тестируют.
  • Локальные данные — использовать осмысленные имена, например inputData, expectedResult.
  • Для моков и стабов: mockUserService, fakeApiResponse.

Стандартизация в команде

Для больших проектов критически важно, чтобы все участники следовали единой конвенции. Это достигается через:

  • ESLint-плагины для тестов (eslint-plugin-jest можно адаптировать под Karma)
  • Документацию и гайдлайны с примерами
  • Шаблоны генерации тестов, например через CLI или скрипты

Особенности Karma

  • Karma автоматически подхватывает файлы по шаблону, указанному в karma.conf.js (files или patterns). Согласованная схема имен файлов облегчает поддержку и предотвращает случайное исключение тестов из сборки.
  • При интеграции с CI/CD правильные имена позволяют группировать тесты по модулям и выводить отчёты в читаемом виде.

Примеры общепринятых схем

Файлы:

src/
  services/
    userService.js
test/
  services/
    userService.spec.js

Блоки describe/it:

describe('UserService', () => {
  describe('createUser', () => {
    it('возвращает нового пользователя с корректными полями', () => { ... });
    it('генерирует ошибку, если имя пустое', () => { ... });
  });
});

Эти конвенции создают ясную, предсказуемую структуру, которая упрощает масштабирование тестовой базы и интеграцию Karma с другими инструментами разработки.