Пишущую машинку я расчехляю нечасто, но сегодня есть повод.
Тесты для JavaScript пишут многие, некоторые пишут много тестов. Есть несколько популярных тестовых фреймворков, таких как Jasmine, Mocha, QUnit, а также инструменты для автоматического запуска тестов. Некоторые из них даже интегрированы в некоторые редакторы кода. Например, Karma runner и Mocha прекрасно интегрированы моими коллегами в WebStorm. Словом, существуют разные способы запускать тесты автоматически и получать результаты в течении одной или нескольких секунд. Впрочем, время зависит от количества и характера тестов.
Как мы используем наши JavaScript тесты
И все бы хорошо, но вот средний размер объема JavaScript кода в проектах растет. Кода становится все больше, тестов становится все больше, выполнение занимает все дольше. И вот наступает момент, а он рано или поздно обязательно наступает, когда запускать сотни и тысячи тестов при редактировании кода нам становится несколько дискомфортно. Нет, у нас конечно настроен CI build, где все тесты прогоняются, мы иногда смотрим сгенерированные отчеты по тестовому покрытию, используем облачные или домашние решения для запуска тестов в разных браузерах и прочих интернет эксплоерах. Но все это не особо помогает там, где мы тратим лучшие годы своей жизни — а именно в написании основной массы JavaScript кода.
Каждый хороший тест приносит пользу, и даже не очень хорошие тесты в JavaScript выполняют, как минимум, роль компилятора, ибо ругаются на все недоступные статическому анализу косяки на пути своего выполнения. Беда в том, что как человек далеко не полностью использует возможности своего мозга, так же неэффективно мы используем огромный потенциал наших тестов. Они могли бы не пылиться на build сервере, а выполняться при каждом нажатии клавиши, тут же предоставлять полезную информацию, мгновенно подсвечивать проблемы в коде, который мы пишем в данный конкретный момент. Иначе получается, что у нас есть спортивный автомобиль, который мы заводим всего раз в день, да и то чтобы отвезти ребенка в школу.
Пришло время выпустить на свободу зверя из клетки!
Зверь называется 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.
Теперь тесты можно использовать гораздо более эффективно, возвращаясь к аналогии с гоночным автомобилем — устанавливаем бесплатную бета-версию wallaby и газ в пол!
Тесты для JavaScript пишут многие, некоторые пишут много тестов. Есть несколько популярных тестовых фреймворков, таких как Jasmine, Mocha, QUnit, а также инструменты для автоматического запуска тестов. Некоторые из них даже интегрированы в некоторые редакторы кода. Например, Karma runner и Mocha прекрасно интегрированы моими коллегами в WebStorm. Словом, существуют разные способы запускать тесты автоматически и получать результаты в течении одной или нескольких секунд. Впрочем, время зависит от количества и характера тестов.
Как мы используем наши JavaScript тесты
И все бы хорошо, но вот средний размер объема JavaScript кода в проектах растет. Кода становится все больше, тестов становится все больше, выполнение занимает все дольше. И вот наступает момент, а он рано или поздно обязательно наступает, когда запускать сотни и тысячи тестов при редактировании кода нам становится несколько дискомфортно. Нет, у нас конечно настроен CI build, где все тесты прогоняются, мы иногда смотрим сгенерированные отчеты по тестовому покрытию, используем облачные или домашние решения для запуска тестов в разных браузерах и прочих интернет эксплоерах. Но все это не особо помогает там, где мы тратим лучшие годы своей жизни — а именно в написании основной массы JavaScript кода.
Каждый хороший тест приносит пользу, и даже не очень хорошие тесты в JavaScript выполняют, как минимум, роль компилятора, ибо ругаются на все недоступные статическому анализу косяки на пути своего выполнения. Беда в том, что как человек далеко не полностью использует возможности своего мозга, так же неэффективно мы используем огромный потенциал наших тестов. Они могли бы не пылиться на build сервере, а выполняться при каждом нажатии клавиши, тут же предоставлять полезную информацию, мгновенно подсвечивать проблемы в коде, который мы пишем в данный конкретный момент. Иначе получается, что у нас есть спортивный автомобиль, который мы заводим всего раз в день, да и то чтобы отвезти ребенка в школу.
Пришло время выпустить на свободу зверя из клетки!
Зверь называется 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 и газ в пол!