Игнорирование файлов и директорий

Jest предоставляет мощные инструменты для тестирования JavaScript-приложений. В процессе работы с тестами возникает необходимость исключить определённые файлы или директории из тестирования. Это особенно актуально для больших проектов, где существуют файлы, которые не требуют тестирования или не могут быть протестированы напрямую, например, сторонние библиотеки, сгенерированные файлы или файлы конфигурации.

Jest позволяет настроить игнорирование файлов с помощью конфигурации. Это можно сделать через файл настроек jest.config.js или поле jest в package.json. Настройка исключений файлов и директорий может быть полезна, если нужно улучшить производительность тестов или избежать ненужного тестирования несущественных частей приложения.

Поле testPathIgnorePatterns

Одним из ключевых способов игнорирования файлов является использование поля testPathIgnorePatterns. Это массив строк, в которых задаются регулярные выражения, соответствующие путям файлов, которые нужно исключить из процесса тестирования.

Пример настройки:

module.exports = {
  testPathIgnorePatterns: ['/node_modules/', '/build/', '/dist/']
};

Здесь исключаются все файлы, находящиеся в директориях node_modules, build и dist. Это особенно полезно, когда проект включает в себя сгенерированные файлы, которые не нужно тестировать.

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

Поле transformIgnorePatterns

Если в проекте используются файлы, которые проходят трансформацию (например, через Babel или TypeScript), их тоже можно исключить с помощью настройки transformIgnorePatterns. Это поле позволяет указать, какие файлы не должны быть обработаны трансформаторами.

Пример настройки:

module.exports = {
  transformIgnorePatterns: ['/node_modules/', '/vendor/']
};

Здесь указаны директории node_modules и vendor, в которых содержатся внешние зависимости, не требующие трансформации. Это может ускорить процесс тестирования, исключив ненужную обработку файлов.

Игнорирование тестов в конкретных файлах

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

Суффиксы в имени файла

Один из способов — это использование суффикса в названии тестового файла, который будет указывать Jest, что тесты в нём не нужны. Например, можно использовать суффикс .skip.test.js:

// test.skip.test.js
describe('Не тестируемая часть', () => {
  test('Этот тест будет проигнорирован', () => {
    expect(true).toBe(false);
  });
});

Такие файлы автоматически будут пропущены Jest, поскольку они содержат .skip в имени.

Игнорирование файлов с помощью modulePathIgnorePatterns

Ещё одной настройкой, полезной для игнорирования определённых файлов, является modulePathIgnorePatterns. Это поле также принимает массив регулярных выражений и используется для исключения модулей, которые Jest пытается загружать во время тестов.

Пример:

module.exports = {
  modulePathIgnorePatterns: ['/path/to/excluded/module/']
};

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

Игнорирование импортируемых файлов

Если необходимо исключить из тестирования только определённые файлы или модули, которые импортируются в тестах, можно использовать jest.mock() или jest.unmock(). Это позволяет легко исключить зависимость или изменить поведение определённого модуля.

Пример использования jest.mock():

jest.mock('path/to/ignored/module', () => {
  return {
    functionName: jest.fn(() => 'mocked value')
  };
});

В этом примере модуль path/to/ignored/module будет замокан, и его реальная реализация не будет использоваться в тестах.

Настройка игнорирования для глобальных настроек

Если в проекте используется глобальная настройка для всех тестов, такая как настройка окружения или настройка мока, можно исключить определённые файлы с помощью глобальных флагов. Например, можно использовать флаг --testPathIgnorePatterns при запуске Jest через командную строку, чтобы исключить определённые файлы или директории.

Пример команды:

jest --testPathIgnorePatterns="/node_modules/|/dist/"

Этот флаг будет работать так же, как и настройка в конфигурационном файле, но его можно использовать для временного исключения файлов при запуске тестов через командную строку.

Итоги

Jest предоставляет несколько способов игнорировать определённые файлы и директории в процессе тестирования. Использование testPathIgnorePatterns, transformIgnorePatterns, а также замены с помощью jest.mock() позволяет гибко настроить процесс тестирования в больших и сложных проектах, ускоряя его выполнение и исключая ненужные или несоответствующие тестированию файлы.