Автор оригинала: Thomas Greco.
Этот пост был первоначально создан для tgreecojs.com Отказ Я искренне ценю все отзывы и с нетерпением ждем, чтобы услышать, что вы должны сказать!
Вступление
Как и любой разработчик, мои предпочтения инструментов, которые были построены в значительной степени полностью в прошлом опыте. Это означает, что если я не использую инструмент, и, как известно, является помощи разработчикам, то есть хороший шанс, что я неформирован на тему. Это было особенно верно с шумом, что стало наиболее широко используемой библиотекой для тестирования Rectjs Приложения, поэтому я подумал, что будет разумно изучить тему немного в блоге.
В этом посте я хочу поделиться своим отзывом о недавнем использовании, используя шутку, вклад в Следующий статический Проект после напережения на это на Репозиторий Next.js Отказ
Чтобы сделать длинную историю, я недавно закончил поворот от динамического веб-приложения на статический сайт для tgreecojs.com С помощью следующего статического проекта. До сих пор это решение работало потрясающе, поэтому я закончил способствовать проекту. Первый порядок бизнеса должен был написать некоторые тесты для этого проекта. Тестирование было координатором в моих областях фокуса в 2017 году. Я получил тонну опыта, написавшие модульные тесты для приложений REVENTJS, и я был готов прыгнуть.
Шаг один – создайте нежелательный тест и подтолкните его к репозиторию.
Мой первый выбор для написания модульных тестов – лента Отказ Это супер легкий вес и предоставляет инструменты, необходимые для записи эффективных модульных тестов. Через несколько минут после того, как настроить мою среду, у меня была ботинка для моего первого test.js
Файл все готово к работе.
Ниже мы можем увидеть код, представленный в Первоначальный запрос на тягу Отказ
// imports….// set up for test scope test('', nest => { nest.test('given no props', assert => { const msg = `should render a post`; const props = makeProps(); const re = RegExp(props); const el = ; const $ = dom.load(render(el)); const output = $('.post').html(); const actual = re.test(output); const expected = true; assert.same(actual, expected, msg); assert.end(); });});
После RAN этот журнал для этого теста будет выглядеть как изображение ниже.
Разве это не красиво? Я присоска для хорошего Нажмите Какая лента мало что производит, я знаю, что я принимал его как должное, но больше на это в на мгновение. На данный момент у меня наконец-то было то, что я мог бы уверенно подтолкнуть к следующему статическому репо.
Около дня, я получил это замечание от владельца проекта.
Но конечно! Почему я использовал эту каменную век, когда я мог просто подключить шутку! Все сарказм в сторону, я не был удивлен этим. Я знаю, насколько важны инструмент шума, стал так много разработчиков, и я не собирался сражаться с этим. Я просто рад погрузиться в рамки.
Становясь одним с шумом
Я знал, что мигрирование этого супер базового теста не было сложно. Мне просто нужно было знать, как был настроен мой тест для того, чтобы работать на работу.
В виде . Один из поведений Marquee Jest – это способность магически проходить тесты, пока они либо:
- в * .test.js или * .spec.js
- Они в папке тестов.
На момент написания теста я даже не осознавал эти критерии, однако мой код был внутри test.js
Файл, чтобы все сработало просто хорошо. Кроме того, я мог полностью устранить этот главный index.test.js
файл как jest
Команда будет направляться на тесты самостоятельно. Когда jest
Запускается, он будет смотреть на тесты проекта для определенных глобальных переменных, которые он предоставляет пользователям. В моем случае я должен был поменяться Тест
для jest’s Опишите
Функция W.
Глобалы в ваших тестовых файлах, Jest ставит каждый из этих методов и объектов в глобальную среду. Вам не нужно требовать или импортировать что-либо для их использования.
Эти глобалы – это то, что позволяет волшебным образом запустить наши тесты без импорта какого-либо кода. Я не хочу превышать критики чрезвычайно известного инструмента, такого как шума, однако я стал очень осознавать загрязнение моей глобальной массы в течение последнего года. (Да, даже в отношении тестирования). Со временем я стал супер удобным с импортной лентой напрямую. Это только взяло сообщение о записи импорта, и я чувствую себя комфортом, зная, что мой тестовый код полностью самостоятельно, и, таким образом, свободен от внешних ошибок. Теперь я не хочу, чтобы казаться, что я нить здесь. Это просто мои обратные связи в библиотеке. Что говорят, я думаю, что это не установленная конфигурация не может позволить тестированию сходить с земли как можно скорее.
Когда мой код был изменен для критериев JEST, мой модульный тест выглядел как следующее.
describe('with no args', () => { it('should render a post with default args', () => { const props = makeProps();c onst re = RegExp(props); const el = ; const $ = dom.load(render(el)); const output = $('.post').html(); const actual = re.test(output); const expected = true; expect(actual).toEqual(expected); }); });`
Тест больше не имеет Assert
Обратный вызов, который использовался с лентой. Вместо этого мы видим, как jest’s ожидать
Функция, использующая для создания испытательных утверждений.
expect(actual).toEqual(expected);
В частности, мы видим ожидать
Убедительно, что значение внутри фактический
равно Ожидается
Использование Товарищ
Отказ (Узнайте больше о том, что ожидания о том, как …|.) Благодаря ленту, миграция этого теста действительно не приняла многое, и было хорошо известно, что я мог бы, безусловно, перенесший любой тест, который я написал, чтобы использовать шутку конфликта. Та же концепции просто разные библиотеки. Я люблю тонуть зубы в знание технологий (особенно если я могу понять их от прыжка), так что это была для меня победа.
У тебя была одна работа
Через день после того, как нажав мой недавно совершенный тест на PR, мне сообщили, что я не смог полностью понять, чего меня просили. Я выпустил тест подразделения, но мне действительно нужно было создать тест на снимок. Большой! Теперь, когда я правильно определил целью, мне просто нужно было выяснить, что именно тест на моментальный снимок был.
Введите тестирование снимков
Как предполагает имя, тест с моментальным снимок займет Снимок
компонента каждый раз проходит тест. Если есть существующий снимок, шума будет сравнивать два, чтобы убедиться, что ничего в нашем интерфейсе неожиданно не изменилось. Это предназначено для предоставления разработчикам мгновенной обратной связи их UI. Принимая во внимание, что устойчивые испытания на единицу предназначены для проверки конкретного поведения, тесты снимки позволяют нам отслеживать тривиальные модификации в нашем UI.
Для этого мы используем React-Test-Renderer
Библиотека .tomatchsnapshot ()
метод. Как только это настроено, шума будет сравнивать снимок нашего компонента к любому предыдущему моментальному моментам и проверку их содержимое одинаково.
describe('Snapshot::s', () => { it('should render the contents of the component.', () => { const props = makeProps(); const el = ; const tree = renderer.create(el).toJSON(); expect(tree).toMatchSnapshot(); }); });
Ниже приведен точный снимк, созданный для
составная часть. Я не собираюсь объяснить каждую строку, но вы сможете легко рассуждать о том, что UI должен рендер.
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Snapshot::s should render the contents of the component. 1`] ` `; Hello
lorem ipsum is the name making tests is this game ", } } />
Как видите, Jest создал читаемое представление нашего UI. С этого момента, любые будущие реализации
будет проверен на этом снимок. Чтобы лучше понять, что это значит, давайте посмотрим, что произойдет, когда мы удаляем от нашего
Пост
Компонент и запустить наш тест на снимок.
Посмотрите на это изображение, мы видим, что ждет, что ждет Div и не может найти его внутри нашего компонента. В результате этого мы видим
-
Знак, таким образом, означает, что блок кода был удален из файла. Если бы мне было проинструктировано удалить этот нижний колонтитул, я бы признал это изменение и запустить jest -u
Jest обновить мой снимок, но я не был. Вместо этого я создал первоначальный снимок для этого компонента, и поэтому мне не нужно беспокоиться о предыдущих снимках. Тот факт, что я создал отправной точкой для тестов для фьючерсов, был достаточно хорош.
На данный момент я был дальше, увидев преимущества, которые шутят довести в проект, но я не был полностью продан на это, будучи концом – все это – все тестированные рамки. Это предназначено для того, чтобы запустить супер быстро, но я обнаружил, что мои тесты на самом деле бегают немного быстрее с лентой, которая имеет смысл из-за того, насколько легкая лента.
Кроме того, лента позволяет мне использовать кран. Позвоните мне старомодный, но нажмите вокруг с 1980-х годов. Это старше меня и технологии, которые продолжались, что это длинные, обычно затрагивают в камне зря. Я лично не пытался интегрировать пользовательский репортер Tap с шумом, но от того, что я собрал Это довольно сложная задача Отказ Это конец света? Нет. Не совсем не стоит отметить. С другой стороны, когда -Асчет
Флаг используется, Jest предлагает довольно прохладный интерфейс, который делает беговые специфические тесты ветером. -Асчет
Держат шутить после создания моментальных испытаний и предложить нам возможность обновлять наши предыдущие снимки, просто нажав U
Отказ
Окончательные слова
Там нет отрицания того, что Jest позволяет легко начать тестирование кода. На самом деле, легко ставит его слегка. Как я только что упомянул, было настолько легко, чтобы я был изначально немного запутался относительно того, как это должно было работать, но дело в том, что она действительно работала. Помимо чувства безразличных об использовании глобальных переменных и не способных легко печатать результаты теста в TAP, у меня нет никаких сомнений в эффективности шума. Наоборот, я действительно рад видеть, что еще, что нужно предложить, как я знаю, что это не последний я увижу об этом!