Тестирование углового быстрее с шуткой

  1. Встретить шутка 🃏
  2. Кстати, я хочу, чтобы мои угловые тесты были быстрее !
  3. Предостережения
  4. Миграция из жасмина
  5. Прощай браузер, наши тесты теперь запускаются в jsdom
  6. Трассировка стека ошибочных ошибок в Zone.js
  7. Интеграция IDE
  8. Резюме

Примечание. В этой статье предполагается, что вы используете созданный Angular CLI v1.0 проект из Angular v4.0.0. Но это также работает на Angular v2.x с CLI в бета-версии.

Несмотря на то, что Angular является всеобъемлющей средой с множеством абстракций по умолчанию: например, custom JIT а также АОТ компиляторы, глубокие RxJS а также Zone.js интеграции, все еще возможно работать за пределами его панели инструментов. Интересно, что можно изменить бегунка теста по умолчанию. Этот пост расскажет вам, почему и как вы можете это сделать.

Если вы когда-нибудь чувствовали себя синим, уставшим, безнадежным во время запуска вашего медленного набора тестов для приложения Angular с Karma в вашем любимом браузере (и я не говорю о внедрении всех возможных компонентов в ваш тестовый файл), продолжайте читать.

Что если я скажу вам, что вы можете:

  • запустить ваши угловые тесты без браузера
  • запустить тестовый пакет в несколько раз быстрее
  • перезапустить мгновенно только тесты, связанные с последними изменениями кода?

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

Встретить шутка 🃏

Шутка безболезненная платформа для тестирования JavaScript Если это не говорит о многом, возможно, вам пришлось потратить все свое свободное время на выполнение медленных тестов кармы 😅. Позвольте мне кратко представить это:

  • Jest - это тестовая платформа, широко адаптированная многими крупные компании и быстро принят сообществом React.
  • Сидит поверх жасмина, поэтому API практически идентичен.
  • Имеет все это API документированный наряду с руководствами, примерами и полезным сообществом на форумах, таких как Reactiflux а также Переполнение стека ,
  • Ориентирован на опыт разработчика (скорость и простота использования является приоритетом.)
  • Предоставляет значимые сообщения об ошибках.
  • Работает на серверах непрерывной интеграции без дополнительных инструментов (абстрагирование DOM с помощью jsdom библиотека.)
  • Обеспечивает покрытие кода из коробки.
  • Интегрируется с Babel и TypeScript без проблем.

И что самое важное, это то, что он обеспечивает умный, режим погружения часы , Режим наблюдения запускает только тесты, затронутые изменениями в git-файле - он также запускает сначала неудачные тесты и может создать первую ошибку, поэтому цикл обратной связи примерно в 10 раз быстрее, чем с Karma, в зависимости от размера набора тестов.

Кстати, я хочу, чтобы мои угловые тесты были быстрее !

Нам нужно установить необходимые зависимости (я использую пряжу , но если вам нравится npm , никаких проблем):

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

где:

  • jest - платформа тестирования Jest
  • jest-preset-angular - предустановка конфигурации с настройкой общих настроек для вас
  • @ types / jest - набор шрифтов

Примечание: если вы используете npm v2 (который не выравнивает зависимости), вам также необходимо установить jest-zone-patch.

Вам нужно будет добавить эту запись в package.json :

"jest": {"preset": "jest-preset-angular", "setupTestFrameworkScriptFile": "<rootDir> /src/setupJest.ts"}

Скорее всего, это все настройки, которые вам понадобятся. Я извлек общие параметры конфигурации в Шутка-предварительно-угловой пакет, и он должен просто работать ™ для большинства случаев.

Примечание: настройки различаются, и вам может потребоваться адаптировать конфигурацию в соответствии с потребностями вашего приложения. Вы должны найти ПРОЧТИ МЕНЯ предустановки полезно. Также стоит отметить, что каждый параметр, установленный пресетом, может быть просто перезаписан.

Следующий шаг - создание setupJest.ts . Этот маленький парень, которого вы можете написать в TS, также обязательно поместите его в / src . Это выглядит так:

импорт 'jest-preset-angular'; import './jestGlobalMocks';

Вы можете видеть, что мы импортируем файл jestGlobalMocks.ts с исправлениями в наш оконный объект ( jsdom не имеет всего этого реализованного, поэтому нам иногда нужно его исправлять).

Пример:

const mock = () => {let storage = {}; вернуть {getItem: key => ключ в хранилище? хранилище [ключ]: ноль, setItem: (ключ, значение) => хранилище [ключ] = значение || '', removeItem: key => удалить хранилище [ключ], очистить: () => хранилище = {},}; };

Mocking localStorage является необязательным, но без mock getComputedStyle ваш тест не будет выполняться, так как Angular проверяет, в каком браузере он выполняется. Нам нужно подделать это.

Теперь вы готовы добавить это в свои скрипты npm:

"test": "jest", "test: watch": "jest --watch",

... и навсегда измените способ тестирования приложений Angular.

О, еще одна вещь. Забудьте об установке PhantomJS на свой CI:

"test: ci": "jest --runInBand",

Стоит отметить, что серверы CI обычно запускают ваш код на одном ядре, поэтому распараллеливание может замедлить ваши тесты. Если вы испытываете такое поведение, используйте флаг --runInBand, чтобы явно указать Jest, что вы хотите запускать тесты один за другим (точно так же, как Karma или Mocha).

Предостережения

Конечно, есть некоторые. Но на удивление не так много.

Миграция из жасмина

Нам нужно будет перенести некоторые звонки Жасмин в Jest. Большая часть API похожа, но есть небольшие отличия.

Ниже перечислены необходимые изменения, которые необходимо внести в вашу кодовую базу.

  • jasmine.createSpyObj ('name', ['key']) -> jest.fn ({key: jest.fn ()})
  • удалить модуль @ types / jasmine (дублировать объявления TS из @ types / jest )

После переноса jasmine.createSpyObj () вы можете вернуться позже, чтобы перенести остальные функции, которые не являются обязательными на момент написания (это может измениться в будущем):

  • jasmine.createSpy ('name') -> jest.fn ()
  • and.returnValue () -> mockReturnValue ()
  • spyOn (...). and.callFake (() => {}) -> jest.spyOn (...). mockImplementation (() => {})
  • Асимметричные сопоставления: jasmine.any, jasmine.objectContained и т. Д.

Прощай браузер, наши тесты теперь запускаются в jsdom

Вы также можете столкнуться с API, доступными в браузерах, но не в jsdom , такими как htmlElement.closest или window.localStorage (который мы только что высмеяли в jestGlobalMocks.ts ).

Трассировка стека ошибочных ошибок в Zone.js

Я не мог заставить Zone выводить более короткие и более значимые трассировки стека ошибок. В качестве обходного пути вы можете добавить Error.stackTraceLimit = 2 ; на ваш setupJest.ts или любой другой номер, который вам подходит . Я считаю это полезным для большинства случаев.

Интеграция IDE

Не забудьте также проверить эти удивительные расширения, чтобы еще больше упростить процесс тестирования:

Резюме

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

Весь набор тестов нашего приложения из 35 файлов с ~ 100 тестами выполнялся в 2,5 раза быстрее, чем с Karma. Мы также можем использовать тестирование снимков , Что самое важное, теперь у нас есть мощный режим часов, мгновенно повторяющий тесты. И все это без необходимости компиляции приложения или запуска сервера разработки .

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

И не забудьте пометить его на GitHub !

Если вы обнаружите проблемы с представленной настройкой или обнаружите ошибку, пожалуйста, сообщите об этом в Шутка-предварительно-угловой GitHub хранилище.

Похожие

Oracle убивает 40 ошибок Java одним махом
Oracle выпустила Java SE 7u25 с исправлениями для колоссальных 40 уязвимостей безопасности. Большинство ошибок, исправленных в Java SE 7u25, «могут использоваться удаленно без аутентификации», согласно
Руководство для начинающих по Node.js (серверный JavaScript)
Node.js - простыми словами - серверный JavaScript . В эти дни было много шума. Если вы слышали об этом или вы заинтересованы в изучении и получении некоторых из них - этот пост для вас. Так в чем же заключается необходимость использования JavaScript на сервере? Чтобы прояснить концепцию Node.js, я бы хотел сравнить ее с обычными серверными языками, такими как PHP. Node.js использует основанную на
Читательские тесты
Китайская компания Onyx, которая некоторое время назад работала на польском рынке в сотрудничестве с вроцлавской компанией ArtaTech, в конце марта представила Onyx Boox Note. Это первая модель китайского производителя с диагональю 10,3 дюйма, основанная на экране по технологии Mobius, которая, в сотрудничестве со стилусом, позволяет рассматривать этот ридер как персональную записную книжку. У меня есть возможность проверить модель в магазине
Зачем Гуглу браузер, или Кому нужен Хром?
Опубликовано jarofed 3 сентября 2008 Мне даже немного стыдно, что я с таким опозданием публикую новость, которой уже "отгул" и до сих пор продолжает гудеть мировая блогосфера. Шучу конечно - нисколько мне не стыдно! Обойдемся без технических подробностей (об особенностях и характеристики будущего браузера довольно подробно написано на блоге Макса Саваневского , Который нравится
... вестный интернет-браузер, который появился со времен первых сетевых разработок"> Internet Explor...
... вестный интернет-браузер, который появился со времен первых сетевых разработок"> Internet Explorer (IE, WIE, MSIE) - самый известный интернет-браузер, который появился со времен первых сетевых разработок. Традиционно предлагается Internet Explorer скачать бесплатно с сайта компании «Майкрософт», это обязательное утилита среды Windows, предназначенная для работы веб-приложений. Такое долгую жизнь браузера связана с популярностью вендора «Майкрософт», к которому относится
Платежная система для бизнеса: о чем следует узнать, чтобы не прогадать с выбором
Платежная система для онлайн-бизнеса - это не только прием платежей. Качественный платежный сервис положительно влияет на рост прибыли, улучшает общее впечатление от клиентского сервиса и сохраняет нервные клетки предпринимателей. О чем нужно поговорить с вашим потенциальным платежным партнером перед началом работы, чтобы сделать правильный выбор? На этот вопрос отвечают специалисты платежного агрегатора Interkassa . О борьбе
Почему Java теперь представляет меньшую угрозу безопасности в Windows, Mac и Linux
Рекламное объявление Java, которая когда-то была жизненно важным компонентом сети, за последние несколько лет приобрела популярность. Большинство современных браузеров по умолчанию блокируют Java, и большинству домашних пользователей больше не нужно его устанавливать. Мы давно слышали, что Java является единственным наиболее небезопасным программным обеспечением для настольных компьютеров, особенно для Windows. Но так ли это до сих пор? Давайте копаться и узнавать.
9 лучших форекс брокеров на 2019 год
Ежегодный обзор ForexBrokers.com является одним из самых цитируемых в отрасли . С более чем 60000 слов исследований по всему сайту, мы проводим сотни часов тестирования форекс-брокеров каждый год. Лидеры отрасли верь нам потому что наш тщательное тестирование является полностью независимым и беспристрастным на 100%.
БЕСПЛАТНЫЙ мониторинг Windows - время работы, журнал событий, безопасность и многое другое
Программное обеспечение для мониторинга Windows: 5 преимуществ PRTG i NetFlow - это протокол для сбора, агрегирования и записи данных о потоке трафика в сети. Данные NetFlow предоставляют более детальное представление о том, как используются пропускная способность и сетевой трафик, чем другие решения

Комментарии

Хотите, чтобы ваша компания или услуги были добавлены в руководство этого покупателя?
Хотите, чтобы ваша компания или услуги были добавлены в руководство этого покупателя? Пожалуйста, отправьте запрос по электронной почте [email protected] с URL-адресом руководства по покупке в строке темы.
Если вас спросят: «Вы хотите, чтобы следующая программа от неизвестного издателя внесла изменения в этот компьютер?
Если вас спросят: «Вы хотите, чтобы следующая программа от неизвестного издателя внесла изменения в этот компьютер?», Нажмите «Да». Повторите шаги выше, чтобы удалить другую программу Java. 4 ) Убедитесь, что вы используете правильную версию Firefox (Firefox 52+ ESR). Вот инструкции , 5) Используя Firefox, войдите в MyWellesley.
Как различия в требованиях к марже или предлагаемом типе исполнения повлияют на мои объемы торговли на рынке Форекс и связанные с этим торговые расходы?
Как различия в требованиях к марже или предлагаемом типе исполнения повлияют на мои объемы торговли на рынке Форекс и связанные с этим торговые расходы? Это лишь некоторые из вопросов, которые могут помочь трейдерам рассмотреть ключевые различия между предложениями. Торговые платформы Forex являются современными воротами для инвестирования на международных валютных рынках. Независимо от вашего стиля торговли или предпочитаемого инструмента с несколькими активами, используемая вами технология
Вы были затронуты очень вирулентным самовоспроизводящимся вымогателем?
Вы были затронуты очень вирулентным самовоспроизводящимся вымогателем? Если нет, как вы можете защитить свои данные, не заплатив выкуп? Читать далее , Даже если вы постоянно обновляете программное обеспечение, такое как Java, ваш компьютер все еще находится в опасности, если вы не устанавливаете обновления Windows. Windows 10
На что нужно обратить внимание в начале работы с платежным сервисом, чтобы потом не пришлось его менять?
На что нужно обратить внимание в начале работы с платежным сервисом, чтобы потом не пришлось его менять? Ответ Interkassa. Онлайн-предпринимателю, который хочет работать не только с украинскими клиентами, стоит уточнить два момента. Первый - в арсенале провайдера методы оплаты, пользуются популярностью на выбранном рынке. Второй - есть опция приема платежей в различных валютах. Например, с Interkassa мерчанты могут получать платежи в гривне,
О такое IDE в любом случае?
О чем нужно поговорить с вашим потенциальным платежным партнером перед началом работы, чтобы сделать правильный выбор? На этот вопрос отвечают специалисты платежного агрегатора Interkassa . О борьбе с мошенничеством Киберпреступления стоили мировой экономике 600 млрд долл *. В поле зрения мошенников попадают и онлайн-продавцы. Как платежные сервисы защищают своих мерчантов и их клиентов? Ответ Interkassa.
Js?
js? Чтобы понять Node.js, вы должны иметь в виду программирование JavaScript на основе событий в браузере . Мы используем ту же технологию здесь. Вместо использования отдельного потока функция присоединяется к событию финиша «медленного доступа к веб-серверу», упомянутому выше, поэтому вы получаете полную функциональность в оптимизированном втором варианте, упомянутом выше, без каких-либо многопоточных издержек. Начало работы
Вопрос заключается в том, почему именно браузер?
Вопрос заключается в том, почему именно браузер? Что получит такой поисковый гигант, как Google от браузера? Похоже, все дело в том, что не так давно Microsoft представила очередную версию своего браузера IE 8. Как уже неоднократно доказывала компания - они наконец научились идти навстречу потребностям потребителей. По крайней мере в вопросах, касающихся разработки браузеров. Седьмая версия эксплорера была намного лучше по шестую. А в восемь - и это интересно

Так в чем же заключается необходимость использования JavaScript на сервере?
О чем нужно поговорить с вашим потенциальным платежным партнером перед началом работы, чтобы сделать правильный выбор?
Но так ли это до сих пор?
Хотите, чтобы ваша компания или услуги были добавлены в руководство этого покупателя?
Если вас спросят: «Вы хотите, чтобы следующая программа от неизвестного издателя внесла изменения в этот компьютер?
Если вас спросят: «Вы хотите, чтобы следующая программа от неизвестного издателя внесла изменения в этот компьютер?
Как различия в требованиях к марже или предлагаемом типе исполнения повлияют на мои объемы торговли на рынке Форекс и связанные с этим торговые расходы?
Как различия в требованиях к марже или предлагаемом типе исполнения повлияют на мои объемы торговли на рынке Форекс и связанные с этим торговые расходы?
Вы были затронуты очень вирулентным самовоспроизводящимся вымогателем?
Если нет, как вы можете защитить свои данные, не заплатив выкуп?