Основы тестирования

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

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

А теперь представьте, что у вас дюжина страниц с системой авторизации и контентом, который должен выглядеть по-разному в зависимости от того, под пользователем какого типа вы авторизовались на сайте. Вы можете составить список всех кнопок, которые вам нужно прокликать вручную для каждого раза, когда вы входите под другим пользователем... но подумайте, как много шагов потребуется, прежде чем вы убедитесь, что ваши изменения не сломали случайно какую-то побочную, но важную функцию на сайте? Подобные ситуации словно кричат "автоматизируй меня!", и это именно то, для чего предназначено тестирование.

Для тестирование бэкенда вы познакомитесь с RSpec, гемом, который написан на Ruby и который позволит выполнять гибкие и функциональные тестовые скрипты, чтобы вам не приходилось сомневаться в работоспособности вашего приложения. Синтаксис RSpec даже читается подобно английскому языку, хотя кое-что все же придется изучить. RSpec позволяет тестировать отдельные части приложения, например, получение данных из базы или сохранение их в неё, или проверять, что ваши хелперы работают как задумано. С помощью нескольких полезных гемов вы так же сможете тестировать более объемные вещи, такие как взаимодействие пользователя с сайтом, в том числе после перехода на новую страницу.

Хотя мы покрываем эту тему в разделе "Бэкенд", тестирование доступно не только на серверной стороне. Для фронтенда вы рассмотрим Jasmine, похожую библиотеку, которая позволяет выполнять схожие с RSpec функции для фронтенда при помощи Javascript. Причины для написания тестов точно такие же, как и в случае с серверной частью.

Подходы к тестированию

Подходы к тестированию могут отличаться. Некоторые команды все еще во многом полагаются на отдел QA (контроль качества, quality assurance), в котором люди вручную выполняют сценарии вроде примера, приведенного выше. Другие используют подход, который называется Разработка Через Тестирование, или TDD (Test Driven Development), который подразумевает, что сначала пишутся провальные тесты и лишь потом под них пишут код, который необходим для прохождения этих тестов, и таким образом приложение по мере написания остается на 100% покрытым тестами. Третьи предпочитают писать тесты только на крупные и критически важные элементы своих приложений и на любые баги, которые приходится фиксить по мере работы над ними (чтобы быть уверенными, что они не появятся снова).

Вне зависимости от того, как именно оно выполняется, тестирование чрезвычайно важно, и вам потребуется это знание для выполнения любой работы. Начинающие разработчики часто назначаются на задачи, в которых необходимо писать тесты и фиксить баги для получения опыта работы с кодом конкретного приложения. К счастью, позднее мы более детально рассмотрим тестирование в курсах по Ruby, Rails и Javascript.

Пункты для размышления

Постарайтесь ответить на предложенные вопросы. После выполнения задания попробуйте ответить на них ещё раз

  • Что конкретно означает "тестирование" для веб-приложений?
  • Почему важно тестирование?
  • Что такое "легаси"-код (наследуемый код)?
  • Почему написание тестов особенно полезно при работе с легаси-кодом?
  • Что такое RSpec?
  • Как запускать тестовое окружение RSpec?
  • Как бы вы написали простой тест на RSpec?

Задания:

  1. Получите реальное представление о том, почему тесты столь важны, посмотрев это видео от Нелла Шамрелла. Некоторые слова вы могли не слышать ранее (вроде "stubs" и "mocks"), но это не столь важно.

  2. Пройдите Вводный уровень в RSpec от Code School, чтобы познакомиться поближе с RSpec, фреймворком для тестирования, написанном на Ruby.

Дополнительные ресурсы

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

Поделиться уроком: