Пишущую машинку я расчехляю нечасто, но сегодня есть повод.
Тесты для JavaScript пишут многие, некоторые пишут много тестов. Есть несколько популярных тестовых фреймворков, таких как Jasmine, Mocha, QUnit, а также инструменты для автоматического запуска тестов. Некоторые из них даже интегрированы в некоторые редакторы кода. Например, Karma runner и Mocha прекрасно интегрированы моими коллегами в WebStorm. Словом, существуют разные способы запускать тесты автоматически и получать результаты в течении одной или нескольких секунд, впрочем время зависит от количества и характера тестов.
Как мы используем наши JavaScript тесты
И все бы хорошо, но вот средний размер объема JavaScript кода в проектах растет. Кода становится все больше, тестов становится все больше, выполнение занимает все дольше. И вот наступает момент, а он рано или поздно обязательно наступает, когда запускать сотни и тысячи тестов при редактировании кода нам становится несколько дискомфортно. Нет, у нас конечно настроен CI build, где все тесты прогоняются, мы иногда смотрим сгенерированные отчеты по тестовому покрытию, используем облачные или домашние решения для запуска тестов в разных браузерах и прочих интернет эксплоерах. Но все это не особо помогает там, где мы тратим лучшие годы своей жизни — в написании основной массы JavaScript кода.
Каждый хороший тест приносит пользу, и даже не очень хорошие тесты в JavaScript выполняют как минимум роль компилятора, ибо будут ругаться на все недоступные статическому анализу косяки на пути своего выполнения. Беда в том, что подобно тому, что человек далеко не полностью использует возможности своего
Пришло время выпустить на свободу зверя из клетки!
Зверь называется wallaby, это такое сумчатое животное размером меньше кенгуру, обитающее на континенте, где уже много лет обитаю я (и кенгуру).
Итак, знакомьтесь: wallaby.js — умный инструмент для автоматического запуска тестов, который я написал и выпустил всего неделю назад (конечно же, в день Австралии). Несмотря на недельный возраст, wallaby уже вызвал значительный интерес у сообщества JavaScript разработчиков и даже уже используется в production. В его основе всего три простых принципа.
Первое — постоянное тестовое покрытие. Говоря о покрытии я не имею ввиду скучные цифры и дотошные типы покрытия. При написании новой или редактировании некой существующей функции, мне все равно 81% или 92% составляет мое покрытие. Когда я пишу код, мне это просто не важно знать об этом каждую секунду. Все что я хочу видеть, это ненавязчивые и не сильно отвлекающие индикаторы прямо там, где я пишу код.
Второе. Если я редактирую какой-то тест или код, который как я знаю покрыт одним или даже несколькими тестами, то почему мой инструмент не может знать о этом и использовать это знание с умом? Все что мне нужно, это чтобы когда я вношу изменение в код, при этом выполнялось только то, что затронуто моим изменением — не больше и не меньше.
Третье. Если мое изменение кода требует запуска нескольких тестовых файлов и мои тестовые файлы независимы (а они должны быть независимы), я хочу чтобы полностью использовался потенциал моей системы и тесты выполнялись параллельно.
Эти три простых принципа, а также глубокая интеграция с редактором кода (на данный момент поддерживаются WebStorm, PhpStorm, IntelliJ IDEA Ultimate, PyCharm Professional, RubyMine, поддержка Visual Studio в процессе — скриншот на поддержка популярных тестовых фреймворков (Jasmine, Mocha, QUnit), показ сообщений об ошибках и console.log сообщений прямо там где они происходят, скриншоты выполнения тестов — это лишь часть того что умеет wallaby.js.
hey @VisualStudio devs, first teaser on what's coming to you with http://t.co/93Ngi23tij /cc @shanselman @mkristensen pic.twitter.com/IOaCdG0LSp
— Artem Govorov (@ArtemGovorov) 29 января 2015
Теперь тесты можно использовать гораздо более эффективнее, возвращаясь к аналогии с гоночным автомобилем — устанавливаем бесплатную бета-версию wallaby и газ в пол!
Автор: Artem_Govorov