Некоторые люди говорят, что устаревший код — это любой код, написанный без тестов, и я один из них. Но я также сторонний разработчик, а это значит, что для тестирования моего кода часто требуется браузер. Это делает тестирование немного сложнее, или, по крайней мере, я так думал. На самом деле, все довольно просто, и в этой статье я покажу вам, что нужно, чтобы начать!
GitHub и Travis CI
Чтобы протестировать наш код, мы собираемся использовать GitHub и Travis CI . GitHub будет размещать наш код, а Travis CI будет служить платформой для тестирования. Это все совершенно бесплатно для общедоступных репозиториев, и есть много документации, которая поможет вам использовать оба этих продукта. Первое, что нужно сделать, это создать репозиторий на GitHub. Для этого урока я создал репозиторий, который вы можете найти здесь .
Следующим шагом является посещение страницы по адресу https://travis-ci.org/ и вход в GitHub. После этого вам нужно будет добавить репозиторий для Travis для выполнения тестов, как показано на рисунке ниже.
Нажав на значок «плюс», вы попадете на консоль, где мы сможем синхронизироваться с нашей учетной записью GitHub и выбрать репозиторий.
Панель инструментов нашего репозитория будет пустой, поскольку мы не настроили ни одного теста. Давайте теперь перейдем к следующему этапу.
Делать вещи с Node.js
Точно так же, как Митохондрия является электростанцией ячейки, так и Node.js станет электростанцией нашей сладкой тестовой установки. Если вы еще не установили Node.js, посетите его веб-сайт и установите его. После этого клонируйте репозиторий, который вы создали в предыдущем разделе, чтобы у вас были все файлы на вашем локальном компьютере. На данный момент мы готовы установить Карму!
Karma — это среда тестирования, изначально созданная командой AngularJS. Мы собираемся использовать его, чтобы помочь нам запустить Jasmine на Travis CI в Firefox. Я знаю, это звучало ошеломляюще, но не волнуйтесь! Вскоре у нас будут действительно крутые тесты, и все это будет того стоить.
 Если у вас еще нет файла package.json и папки node_module в вашем хранилище, запустите npm init и завершите настройку.  Предыдущая команда поможет вам в создании файла package.json .  Далее выполните следующую команду: 
 npm install karma --save-dev 
Мы также собираемся установить несколько необходимых плагинов для Karma: karma-jasmine и karma-firefox-launcher. Так что давай и беги
 npm install karma-jasmine karma-firefox-launcher --save-dev 
Теперь, когда у нас установлены все необходимые плагины, мы хотим рассказать Karma о нашем проекте, чтобы он мог запускать тесты против него. Запустите команду:
 karma init my.conf.js 
Это проведет вас через управляемую настройку, задавая вопросы о вашем проекте и его среде. На следующем снимке экрана показаны все необходимые вопросы и ответы для простой настройки Karma:
  Мы еще не создали наш тестовый каталог.  Поэтому, когда нас спросят о расположении наших исходных и тестовых файлов, мы будем предупреждены, что tests/*.js не существует.  Что касается dist/*.js , это файл, с которым я планирую запустить свои тесты, который может отличаться для вашего проекта. 
Это оно! Карма хороша, чтобы идти!
Конфигурирование Трэвис
  До сих пор Трэвис понятия не имеет, что делать с нашим хранилищем.  Давайте это исправим.  Нам нужно создать файл .travis.yml со следующим кодом: 
 language: node_js node_js: - "0.10" script: node_modules/karma/bin/karma start my.conf.js --single-run before_install: - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start before_script: - npm install 
  Это говорит Трэвису, что мы используем Node.js для тестирования JavaScript и используем Firefox в качестве браузера.  Кроме того, мы указываем, что перед началом тестирования необходимо запустить npm install чтобы получить все необходимые плагины. 
Написание тестов с жасмином
  До этого момента мы правильно настроили Карму и Трэвиса.  Итак, мы готовы написать несколько тестов для нашего кода JavaScript.  Для моего примера репозитория у меня есть файл coolLibrary.js который добавляет coolLibrary.js квадрат к элементу body и присваивает ему атрибут data .  Вы можете увидеть это в действии на CodePen . 
  Чтобы протестировать этот код, я создал каталог tests упомянутый в файле my.conf.js , и оттуда я добавлю тестовые файлы jasmine.  Моим первым тестом будет простая проверка, чтобы убедиться, что на странице есть div с классом box .  Жасмин делает это очень простым с простым для понимания синтаксисом функции.  Вот как выглядит первый тест ( checkIfDivExists.js ): 
 describe('getDiv', function() { var d = document.querySelector('.box'); it('Should exist', function() { expect(d.nodeName).toBe('DIV'); }); }); 
  Это создает пакет, который ищет элемент с классом box и ожидает, что его имя узла будет DIV .  Синтаксис довольно прост. 
В дополнение к предыдущему тесту я также создам еще два теста, которые вы можете найти в репозитории GitHub для этого проекта и которые будут скопированы ниже для вашего товара:
 describe('getDivBg', function() { var d = document.querySelector('.box'); it('Should be teal', function() { expect(d.style.backgroundColor).toBe('teal'); }); }); describe('getDivAttribute', function() { var d = document.querySelector('.box'); it('Should be bar', function() { expect(d.getAttribute('foo')).toBe('bar'); }); }); 
Выполнение тестов
  С тестами для нашего кода, наш последний шаг — зафиксировать наш код.  Это добавит всю нашу логику тестирования и вызовет сборку на Travis.  Не забудьте иметь файл .gitignore который гарантирует, что ваша папка node_modules не будет node_modules в репозиторий!  После того, как вы подтвердите и отправите свой код, Travis автоматически обнаружит изменения и запустит ваши тесты.  Процесс может занять несколько минут, но вы получите уведомление по электронной почте, как только сборка будет завершена. 
Успех!
Вы можете создать столько тестов, сколько вам нужно, и GitHub обязательно проверит входящие пул-запросы на соответствие этим тестам.
Вывод
В этом уроке мы узнали, как настроить простую среду тестирования для нашего кода JavaScript с использованием Karma, Jasmine и Travis. Не стесняйтесь видеть окончательный результат на https://github.com/sitepoint-editors/FEJStesting и озвучивать любые вопросы или проблемы в комментариях! Вы можете просмотреть последний тест на Travis по адресу https://travis-ci.org/tevko/FEJStesting



