Как добавить Jest в проект Angular и почему мы должны это учитывать?

Когда у нас есть возможность участвовать в проекте Angular с самого начала, мы, вероятно, оказываем влияние на многие архитектурные аспекты. Один из этих аспектов - выбор подходящих методик и инструментов тестирования. Во множестве проектов используется стандартный инструмент, поставляемый с Angular: Karma и Jasmine.

Однако важно понимать, что выбор Test Runner не ограничивается кармой. Почему-то Шуткой стоит заинтересоваться.

Какие возможные преимущества приносит Jest вашему проекту? 📘

  • Более быстрая работа и параллельное тестирование прямо из коробки
  • Различные функции, предоставляемые Jest CLI, повышающие эффективность работы
  • Простая подделка, шпионаж и издевательство
  • Встроенные утверждения и покрытие кода
  • Поддержка машинописного текста

… И, честно говоря, многие другие функции, о которых вы можете прочитать в документации. Теперь давайте сосредоточимся на практическом аспекте и цели, которая заключается в добавлении JEST в ваш проект Angular.

Установите все необходимые зависимости 🌱

Если вы выберете npm в качестве диспетчера пакетов в своем проекте

npm install jest jest-preset-angular @types/jest --save-dev

или если yarn - ваш выбор в проекте

yarn add jest jest-preset-angular @types/jest --dev

Создайте базовую конфигурацию 🚧

Давайте создадим jest.config.js файл в каталоге вашего проекта.

В качестве альтернативы вы можете предоставить указанную выше конфигурацию в package.json,

{
  "jest": {
    "preset": "jest-preset-angular",
    "roots": ["<rootDir>/src/"],
    ....
 }
}

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

Затем найдите файл <root-dir>/src/test.ts и полностью замените его содержимое следующим кодом

В первой (1) строке мы импортируем соответствующую библиотеку jest-preset-angular. Остальное необходимо для использования JSDOM, поставляемого с Jest.

Последнее, что вам нужно сделать, это небольшую tsconfig.spec.json модификацию файла.

Строка (6) необходима, чтобы избежать следующего предупреждения

If you have issues related to imports, you should consider setting `esModuleInterop` to `true` in your TypeScript configuration file (usually `tsconfig.json`).

Строка (7) необходима для отражения метаданных во время выполнения Jest.

Следуйте за мной в Твиттере, если вы хотите быть в курсе новых замечательных вещей об Angular и интерфейсе! 😄

Запустить тест с помощью Jest runner 🚗

Просто введите в командной строке jest и, если все настроено правильно, Jest выполнит тестовые костюмы и подготовит отчет.

Более того, покрытие как встроенная функция создается в каталоге ./coverage.

Открыв index.html файл в браузере, вы увидите базовый отчет о покрытии кода проекта.

Удалить Karma runner 🍂

И последнее, но не менее важное: оставить в проекте чистоту после внесенного улучшения. Если Jest станет основным исполнителем тестов в нашем проекте Angular, Karma больше не понадобится. Мы можем сделать это простым способом

npm uninstall karma karma-chrome-launcher karma-coverage-istanbul-reporter karma-jasmine karma-jasmine-html-reporter

или если yarn - ваш выбор в проекте

yarn remove karma karma-chrome-launcher karma-coverage-istanbul-reporter karma-jasmine karma-jasmine-html-reporter

По умолчанию Angular использует Karma для выполнения тестов путем настройки соответствующего builder в architect разделе в angular.json файле. Теперь его можно удалить, поскольку он больше не используется.

"test": {
  "builder": "@angular-devkit/build-angular:karma",
  "options": {
    "main": "src/test.ts",
    "polyfills": "src/polyfills.ts",
    "tsConfig": "tsconfig.spec.json",
    "karmaConfig": "karma.conf.js",
    "assets": [
      "src/favicon.ico",
      "src/assets"
    ],
    "styles": [
      "src/styles.scss"
    ],
    "scripts": []
  }
}, // REMOVE ALL "test" section

Помните, что если вы ранее использовали команду ng test для запуска тестов, эта команда больше не будет доступна. Теперь ваш тест будет запущен командой jest.

Последний шаг - karma.conf.js удаление файла

Пример 📕

Я включил все шаги, представленные выше, в специально подготовленный репозиторий. Не стесняйтесь проверить и попробовать, как интеграция Jest с Angular работает самостоятельно.



Следуйте за мной в Твиттере, если вы хотите быть в курсе новых замечательных вещей об Angular и интерфейсе! 😄

Серия Angular Testing

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

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