20 ноября 2018: обновлено до Angular 7

Несколько месяцев назад я обнаружил Jest, тестирование моментальных снимков, наконец, простой способ протестировать мой html и получить хорошие отзывы в Angular. С первого момента я влюбился в этот новый способ тестирования. У меня была возможность добавить его в новый проект, над которым я только начинал работать. Кривая обучения проста, если вы пришли от Jasmine, почти с таким же синтаксисом, но более мощным.
Ловушка при использовании тестирования моментальных снимков заключается в том, что вы должны помнить, что вы должны тщательно анализировать свои неудачные html-снимки, а не просто принять изменения, сделанные здесь. Кроме того, рядом с тестированием ваших html-файлов вам также нужно проверить логику.

Помимо шутки, у вас есть еще один мощный инструмент для ускорения тестирования и работы на основе тестов: WallabyJs.

Возможность использования разделенных шаблонов html и CSS с templateUrl и styleUrls не работала с wallabyJs из коробки. Если вы хотите использовать встроенные шаблоны, проблем не возникнет. Ищу решение, но не нашел. Поэтому я решил потратить некоторое время и написать свою небольшую библиотеку, чтобы использовать вместе wallabyJs и Jest.

В моем примере ниже я буду использовать пряжу, так как я предпочитаю ее выше npm!

Как начать с этого

Удалите некоторые устаревшие зависимости, когда мы начнем использовать шутку «карма» и «жасмин» устарели.
yarn remove karma karma-chrome-launcher karma-cli karma-coverage-istanbul-reporter karma-jasmine karma-jasmine-html-reporter jasmine-core jasmine-spec-reporter @types/jasmine @types/jasminewd2

npm remove karma karma-chrome-launcher karma-cli karma-coverage-istanbul-reporter karma-jasmine karma-jasmine-html-reporter jasmine-core jasmine-spec-reporter @types/jasmine @types/jasminewd2

Настроить jest с покрытием кода

Теперь мы добавляем наши зависимости, чтобы шутка работала.

Прежде всего добавим шутку:
yarn add @types/jest jest @angular-builders/jest --dev
npm i @types/jest jest @angular-builders/jest -D

Поскольку покрытие кода важно, нам также необходимо опубликовать его где-нибудь в гидролокаторе
yarn add istanbul-reports jest-sonar-reporter --dev
npm i istanbul-reports jest-sonar-reporter -D

Мы можем добавить шутку в наш проект двумя разными способами. Первый способ - добавить всю нашу конфигурацию в package.json, второй - создать отдельный файл jest.config.js, который позволит нам легко поддерживать конфигурацию.

jest.config.js используется для нашей конфигурации jest. Здесь мы определяем покрытие кода, какие файлы необходимо включить в тест и т. Д.

moduleNameMapper - мощный инструмент для переназначения имен импорта. Вместо множества точек, таких как ../../../../common/common.module, вы можете использовать @common/common.module

src/setupJest.ts больше не требуется, поскольку мы расширяем модули узлов, где некоторые настройки предопределены!

Мы корректируем наш файл angular.json, чтобы сообщить angular, что мы используем jest в качестве тестового движка.

Настройте файл tsconfig.spec.json для вашего приложения angular, чтобы

Теперь мы добавляем тестовые команды в наш package.json, чтобы легко начать тестирование.

test: запустит наши тестовые команды
test: охват запустит тестовое покрытие
test: snapshot обновит все снимки в тестах. Если вы запускаете эту команду, убедитесь, что сейчас правильные снимки с ошибками
test: watch watch jest tests

Теперь шутка работает, и покрытие можно проверить в командной строке:

И в красивом отчете

Настроить интеграцию валлаби

Тесты рабочие и тоже сдающие результаты. Пришло время добавить валлаби.

yarn add ngx-wallaby-jest --dev

npm i ngx-wallaby-jest -D

Создайте файл wallaby.js со следующей конфигурацией.

Не нужно добавлять шаблон html, css, scss, less. Мы предварительно обработаем эти файлы перед запуском тестов! С ngxWallabyJest в этом компоненте конфигурации через плагин будет работать только компонент, используйте правильный шаблон!

Jest запускается на узле, а не в браузере, это также причина, по которой нам нужно имитировать некоторые функции.

Затем загрузите jest, чтобы использовать ваш jest.config.js

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

Заключение

Когда вы начинаете новый проект, думайте о шутке. И если у вас есть возможность использовать wallabyJs или купить для него лицензию, сделайте это. Это даст вам много преимуществ для ваших возможностей кодирования!

Полный код

Полный пример можно найти на https://github.com/bovandersteene/angular-cli-jest-wallaby