Запуск конкретных тестов

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

Конфигурация Karma для выборочного запуска

Karma управляется через файл конфигурации karma.conf.js, где задаются браузеры, фреймворки тестирования и файлы для тестов. Для запуска конкретных тестов важно понимать, что выбор тестов в основном определяется не самой Karma, а фреймворком, который используется для написания тестов (Jasmine, Mocha, QUnit и др.).

Пример базовой конфигурации Karma с использованием Jasmine:

module.exports = function(config) {
  config.set({
    frameworks: ['jasmine'],
    files: [
      'src/**/*.js',
      'test/**/*.spec.js'
    ],
    browsers: ['ChromeHeadless'],
    singleRun: true
  });
};

Использование фильтров файлов

Karma позволяет запускать только те тесты, которые соответствуют определённой маске в files.

files: [
  'test/specificTest.spec.js'
]

Этот подход подходит для тестов по файлам, но не позволяет запускать отдельные it-блоки внутри файлов.

Запуск конкретного блока тестов в Jasmine

В Jasmine можно ограничить запуск тестов с помощью методов fdescribe и fit:

  • fdescribe — запускает только выбранный блок describe.
  • fit — запускает только выбранный блок it.

Пример:

fdescribe('Функции работы с массивами', () => {
  it('должна находить максимальное значение', () => {
    expect(Math.max(1, 2, 3)).toBe(3);
  });

  fit('должна фильтровать положительные числа', () => {
    const arr = [-1, 0, 1, 2];
    expect(arr.filter(x => x > 0)).toEqual([1, 2]);
  });
});

В этом примере Karma с Jasmine выполнит только тест fit, игнорируя остальные. Использование fdescribe работает аналогично для целого набора тестов.

Применение grep для Mocha

Для Mocha Karma поддерживает параметр grep, который позволяет фильтровать тесты по регулярному выражению. В конфигурации Karma это задаётся через client.mocha.grep:

client: {
  mocha: {
    grep: 'фильтровать положительные'
  }
}

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

Запуск тестов через CLI

Karma CLI предоставляет возможность запускать тесты по отдельным файлам без изменения конфигурации:

karma start karma.conf.js --files test/specificTest.spec.js

Для Mocha можно добавить фильтрацию через grep:

karma start karma.conf.js -- --grep "должна фильтровать положительные"

Комбинированные стратегии

В больших проектах часто применяют комбинированный подход:

  1. Использовать маски файлов для ограничения набора тестов.
  2. Использовать fit/fdescribe (Jasmine) или grep (Mocha) для фильтрации отдельных блоков.
  3. Настроить отдельные конфигурации Karma для быстрого запуска критически важных тестов.

Автоматизация в Watch-режиме

При разработке удобно запускать тесты в режиме наблюдения (autoWatch: true), что позволяет Karma автоматически перезапускать выбранные тесты при изменении файлов. В сочетании с fit или grep это ускоряет цикл разработки и позволяет сосредоточиться только на изменённых участках кода.

Практические рекомендации

  • Не оставлять fit или fdescribe в основном репозитории — это может привести к пропуску других тестов. Для временной разработки их используют локально.
  • Использовать маски файлов для интеграционных тестов — это ускоряет запуск большого набора тестов.
  • Регулярно проверять фильтры grep — чтобы убедиться, что они совпадают с текущими названиями тестов.

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