У нас есть культура использования непрерывной интеграции («тесты CI») в Leaf, чтобы поддерживать высокое качество продукции по мере роста нашей команды.

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

Что такое тесты?

Тесты в этом контексте — это в основном код для проверки функциональности кода приложения. Проще говоря, он запускает некоторые части кода и проверяет результат выполнения, чтобы убедиться, что он работает должным образом. Если вы измените целевой код, который не соответствует спецификации, тестовый код завершится ошибкой, и мы получим предупреждение. Это означает, что наш производственный код для приложения Leaf имеет больше шансов быть безошибочным для наших пользователей без необходимости непрерывного ручного тестирования.

Что такое КИ-тесты?

CI-тесты — это тесты, которые запускаются непрерывно и автоматически всякий раз, когда разработчики отправляют новый код для добавления новых функций. В Leaf нам требуется запрос на вытягивание GitHub для прохождения теста CI, а рецензенты проверяют результат теста CI, прежде чем одобрить изменение в запросе на вытягивание. Вы даже можете настроить GitHub, чтобы он не принимал изменения, если тест CI не проходит, что я могу реализовать по мере дальнейшего масштабирования нашей команды.

Запуск тестов в Heroku CI

Heroku CI построен на той же инфраструктуре Heroku, платформе-как-сервисе, где вы можете развернуть код для размещения веб-приложения или чего-то подобного. Мы используем Heroku для размещения нескольких серверных служб и приложений Leaf.

Запускать тесты в Heroku CI так же просто, как если бы это был обычный код Node.js. Он автоматически обнаружит код, являющийся Node.js, и запустит тест npm test, что является типичным способом запуска тестов в Node.js.

Как насчет испытаний Метеора?

Meteor — это среда JavaScript, которая позволяет нам довольно быстро кодировать веб-приложение с хорошо организованной структурой приложения и множеством сторонних библиотек. Мы используем Meteor в Leaf, потому что он позволяет нашей команде очень эффективно разрабатывать продукт, а также помогает внедрять передовые веб-технологии.

Meteor также предоставляет тестовую среду, однако для запуска тестов Meteor вам необходимо установить Meteor.

Запуск тестов Meteor в Heroku CI

К счастью, Heroku CI предоставляет способ настроить поведение, поэтому все, что вам нужно, это поместить файл app.json со следующим содержимым.

{
  "environments": {
    "test": {
      "scripts": {
        "test-setup": "mkdir /tmp/meteor-home; curl https://install.meteor.com | HOME=/tmp/meteor-home /bin/sh; HOME=/tmp/meteor-home PATH=$PATH:/tmp/meteor-home/.meteor meteor add dispatch:phantomjs-tests",
        "test": "HOME=/tmp/meteor-home PATH=$PATH:/tmp/meteor-home/.meteor npm test"
      }
    }
  }
}

Это просто устанавливает Meteor перед запуском теста. В этом случае мы также устанавливаем библиотеку PhantomJS. Для получения дополнительной информации о том, как написать файл app.json, обратитесь к оригинальному документу в Heroku.

Следующий шаг

Приведенный выше пример работает хорошо, но он не идеален с точки зрения эффективности использования ресурсов. Лучше кешировать установку Meteor и повторно использовать ее для следующего выполнения тестов. Heroku предоставляет еще один метод настройки, называемый Buildpack, и с его помощью мы сможем лучше контролировать установку и кэширование. Мы с нетерпением ждем возможности увидеть лучшее решение с ним.

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