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

Инструменты

Шутка

Jest - одна из наиболее часто используемых тестовых платформ JavaScript, разработанная Facebook, что делает ее надежным выбором для любого проекта. В нем используется понятное соглашение, делающее тесты понятными для чтения и записи. Кроме того, он может выводить данные о покрытии кода в нескольких форматах, что делает его идеальным выбором для всех задач, связанных с тестированием, которые необходимы вашему программному обеспечению.

КодКлимат

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

Трэвис Си

Travis CI - это облачный сервис с непрерывной интеграцией. Определяя программное обеспечение, операционную систему и задачи в файле .travis.yml, каждая фиксация автоматически запускает новую сборку с использованием настроек, определенных в конфигурация.

Настройка проекта

Образец репозитория, содержащий код этой статьи, можно найти в разделе



Установка

Сначала создайте новый проект с npm. Следуйте инструкциям и настройте все в соответствии с потребностями вашего проекта.

npm init

Теперь мы можем установить Jest.

npm i --save-dev jest

Настраивать

Чтобы Jest заработал, нам нужно изменить наш тестовый скрипт. Откройте package.json и замените тестовый скрипт следующим кодом:

"test": "jest --coverage"

Ваш package.json теперь должен выглядеть примерно так:

{
  "name": "jest-test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "jest --coverage"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "jest": "^25.5.1"
  }
}

Используя в шутку вариант покрытие, мы получаем подробный отчет о покрытии, который можно использовать в дальнейшем.

Затем перейдите на https://codeclimate.com/login/github/join и войдите в свою учетную запись Github. После входа в систему добавьте репозиторий, для которого вы хотите получить данные анализа. Перейдите на вкладку Настройки репо и перейдите в Покрытие тестов. Скопируйте идентификатор тестового репортера. Он нам понадобится на следующем шаге.

Теперь создайте конфигурацию Трэвиса. Добавьте новый файл с именем .travis.yml. Вставьте следующий код и замените ИДЕНТИФИКАТОР ВАШЕГО РЕПОРТЕРА на идентификатор, который мы только что скопировали.

env:
  global:
    - CC_TEST_REPORTER_ID=YOUR REPORTER ID
language: node_js
node_js:
  - node
before_script:
  - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
  - chmod +x ./cc-test-reporter
  - ./cc-test-reporter before-build
  - npm install -g jest
after_script:
  - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT

Этот скрипт сообщает Трэвису, какой язык использовать, какую версию узла выбрать и что делать до и после запуска теста. Перед выполнение нашего тестового скрипта, инструмент CodeClimates test reporter приобретен и jest установлен на изображении. После завершения нашего теста инструмент отчетов о тестировании используется для загрузки результатов покрытия в CodeClimate. Чтобы определить, какой проект выбрать, мы устанавливаем наш идентификатор репортера как переменную среды, которая используется инструментом репортера.

Посетите https://travis-ci.com/ и войдите в свою учетную запись GitHub. Трэвис должен запросить установку в вашем аккаунте. После завершения новые коммиты автоматически запускают сборку для любого общедоступного проекта, содержащего файл .travis.yml.

Отправьте изменения в ваш репозиторий, Трэвис должен автоматически запустить новую сборку.

После каждой сборки вы будете видеть подробный отчет о покрытии тестами на панели инструментов вашего проекта CodeClimate.

Тестирование

Создайте два файла с именами Calculator.js и Calculator.test.js.

Подсказка: Jest ищет любые файлы, соответствующие * .test.js, и выполняет их при запуске.

Откройте файл Calculator.js и вставьте следующий код:

function add(x, y) {
  return x + y
}
function subtract(x, y) {
  return x - y
}
function check(x, y) {
  return x === y
}
module.exports = { add: add, subtract: subtract, check: check }

Эти функции являются хорошей демонстрацией функциональности и синтаксиса Jests.

Затем откройте файл Calculator.test.js и вставьте наши тестовые примеры:

const calculator = require('./calculator');
describe('Adds, subtracts, and checks 3 and 2 for equality', () => {
  test('Adds 3 to 2', () => expect(calculator.add(3, 2)).toBe(5))
  test('Adds 2 to 3', () => expect(calculator.add(2, 3)).toBe(5))
  test('Subtracts 2 from 3', () => expect(calculator.subtract(3, 2)).toBe(1))
  test('Subtracts 3 from 2', () => expect(calculator.subtract(2, 3)).toBe(-1))
  test('Checks 3 and 2 for inequality', () => expect(calculator.check(3, 2)).toBeFalse)
  test('Checks 2 and 3 for inequality', () => expect(calculator.check(2, 3)).toBeFalse)
})
describe('Adds, subtracts, and checks 3 and 3 for equality', () => {
  test('Adds 3 to 3', () => expect(calculator.add(3, 3)).toBe(6))
  test('Subtracts 3 from 3', () => expect(calculator.subtract(3, 3)).toBe(0))
  test('Checks 3 and 3 for equality', () => expect(calculator.check(3, 3)).toBeTrue)
})

Как видите, у Jest простой для понимания синтаксис.

Чтобы получить полный список возможностей Jest, я настоятельно рекомендую прочитать документацию. (Https://jestjs.io/docs/en/getting-started)

Отправьте изменения и проверьте результат сборки в Travis. Это должно выглядеть примерно так:

Когда Трэвис завершает вашу сборку, качество вашего кода определяется автоматически в CodeClimate. Проверьте панель управления своего проекта, чтобы увидеть свой первый запуск. Должно получиться так:

Вы успешно настроили среду CI своего проекта.

Резюме

Создать простую среду CI / Test для вашего проекта JavaScript легко с помощью таких инструментов, как Jest и Travis. Если облачные службы анализируют код, изменяемый при каждой фиксации, отслеживая плохие фиксации или потенциальные ошибки, обнаруженные во время тестов, код становится более надежным, а некоторые ошибки даже не попадают в Программное обеспечение. В сочетании с линтером JavaScript, таким как ESLint, резко повышается качество кода для каждого проекта.