Обновление (октябрь 2019 г.)

Прежде чем читать этот пост, вам стоит проверить этот пакет от Евгения Мануйлова, что, вероятно, является самым простым решением для большинства случаев. Как он сказал в комментариях:

На сегодняшний день существует пакет jest-runner-groups, который позволяет помечать ваши тестовые файлы и выполнять группы тестов с помощью Jest. Больше не нужно возиться с конфигами. Просто добавьте докблок в свой тестовый файл с параметром @group, а затем используйте - group = yourgroup в командной строке.

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

Например, когда мы тестируем компонент, загружающий список объектов из серверной части, мы не делаем настоящих HTTP-запросов, потому что хотим, чтобы тест был быстрым и надежным. Однако нам также понадобятся некоторые специальные тесты, которые выполняют реальные запросы к бэкэнду, чтобы проверить правильность наших двойников, другими словами, тесты, проверяющие, что наш контракт не нарушен. Поэтому многие называют их контрактными испытаниями.

Я не хочу начинать еще одну дискуссию о типах тестов, поэтому просто скажу, что иногда, в зависимости от нашего контекста (расположение команд, стратегия ветвления, инфраструктура ...), удобно различать между быстрые / независимые тесты и медленные / внешние_системные_зависимые тесты. Я буду называть их модульными и интеграционными тестами, но вы можете называть их так, как вам удобнее, важными Дело в том, что можно запускать их по отдельности.

TL; DR

У вас может быть несколько файлов конфигурации jest с разными настройками testRegex, чтобы различать ваши наборы тестов:

Как я пришел к этому решению?

Есть несколько средств запуска тестов, которые позволяют легко разделять наши наборы. Например, в Rspec вы можете пометить свои тесты и просто запустить те, у которых есть конкретный тег. Я искал этот вариант в шутку, но только что нашел этот запрос функции (пока не рассматривается). Есть ли другое решение? Конечно, это является:

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

Например, если мы просто хотим запустить тесты, заканчивающиеся на .spec.js, мы можем использовать регулярное выражение \ .spec \ .js $ в нашем файле конфигурации, но мы должны быть очень осторожны, потому что мы определяем наши настройки в объекте JS следующим образом:

// package.json
...
jest: {
  ...
  
  "testRegex": "PUT_YOUR_REGEX_HERE",
  ...
}
...

и jest проанализирует этот JS-объект как строку, поэтому нам нужно будет экранировать обратную косую черту внутри нашего регулярного выражения. Поэтому наш конфигурационный файл будет таким:

// package.json
...
jest: {
  ...
  
  config.testRegex = "\\.spec\\.js$"
  ...
}
...

Но как запустить тесты, соответствующие другому регулярному выражению? Давайте посмотрим на пример:

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

my-fancy-integration-test. ispec.js

Но эти файлы не будут запускаться по умолчанию, потому что они не соответствуют нашему регулярному выражению по умолчанию. Что мы можем сделать? Мы можем просто использовать параметр - testPathPattern при запуске jest:

jest --testPathPattern=ispec\\.js$

И мы можем настроить разные сценарии в нашем package.json следующим образом:

//Package.json
...
"scripts": {
...
"unit": "jest",
"integration": "jest --testPathPattern=ispec\\.js$",
...
}
...

И готово! 🎉🎉 Но подождите! Что, если я хочу иметь другой контекст при запуске разных наборов. Можем ли мы улучшить предыдущую конфигурацию?

Использование разных файлов для каждого типа теста

Одно из самых важных правил в разработке программного обеспечения - наличие разных частей с четкими обязанностями. Вот почему я не хочу определять параметры настройки шутки внутри моего package.json. Я предпочитаю извлекать их в отдельный файл (по умолчанию jest.config.js).

Но что, если мы хотим иметь разные варианты для разных наборов? Мы можем создавать разные файлы и использовать опцию -c, чтобы выбрать нужный:

И мы можем просто повторно использовать параметры по умолчанию и переопределить то, что нам нужно:

// jest.config.integration.js
var config = require('./jest.config')
config.testRegex = "ispec\\.js$" //Overriding testRegex option
console.log('RUNNING INTEGRATION TESTS')
module.exports = config

Вы используете другой / более простой подход? Сообщите нам, чтобы мы могли стать лучше!

Удачного тестирования! ✅✅✅