Mocha - это хорошо известный фреймворк для тестирования Node.js. Он может поддерживать выходы как xUnit, так и TAP, и разработчики могут выбирать свою любимую библиотеку утверждений. Гибкость и обширное сообщество Mocha по-прежнему делают его отличным выбором для тестирования приложений Begin.

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

В этом посте мы продемонстрируем основы тестирования с помощью Mocha в бессерверном приложении в Начать; пример приложения в этом посте даст те же результаты, что и наши статьи о тестировании с помощью Jest и TAP.

Попробуйте Mocha с Begin прямо сейчас!

Нажмите эту кнопку, чтобы развернуть новый пример приложения Node.js + Mocha для запуска через 15 секунд:

Тестирование библиотек

Если вы видели наши предыдущие примеры бессерверного тестирования с использованием TAP и Jest, то это будет вам очень знакомо. Begin поддерживает любую платформу тестирования, потому что мы стремимся помочь вашей команде сосредоточиться на использовании инструментов, которые работают на вас.

Во-первых, давайте создадим ловушку для Mocha, которая будет запускать и останавливать @architect/sandbox (локальную среду разработки, которая позволяет разработчикам работать локально, эмулируя поведение API Gateway, Lambda-функций и DynamoDB), а также необходимые зависимости для выполнения ваших тестов.

// test/get-index-test.js
let sandbox = require('@architect/sandbox')
let data = require('@begin/data')
let tiny = require('tiny-json-http')
let assert = require('assert')
describe('mocha app', () => {
  before(async () => {
    await sandbox.start({ quiet: true })
  })
  after(async () => {
    await sandbox.end()
  })
  // more tests will go here
}

Тестирование `GET /` route

В Mocha мы описываем наши тесты и то, что они должны делать. Этот первый тест гарантирует, что GET запрос к нашей домашней странице завершится без ошибок. Теперь мы знаем, что наш обработчик Lambda на src/http/get-index/index.js работает.

// test/get-index-test.js
...
  describe('@http', function() {
    it('should get /', async () => {
      let url = 'http://localhost:3333'
      let result = await tiny.get({ url })    
    })
  })
...

Тестирование `@begin/data`

Несмотря на то, что этот пример не реализует Begin Data, наличие этого тестового примера полезно для изучения того, как работает API. Мы протестируем data.set() и data.get() на запись и чтение некоторых данных в локальную базу данных в памяти, работающую в песочнице. Этот тип эфемерной среды идеально подходит для выполнения быстрых тестов без ущерба для остальных этапов сборки.

// test/get-index-test.js
...
  describe('@begin/data', function() {
    it('data.set', async () => {
      let result = await data.set({table: 'tmp'})
      assert.equal(result.table, 'tmp')
      console.log(result)
    })
    it('data.get', async () => {
      let result = await data.get({table: 'tmp'})
      assert.equal(result.length, 1)
      console.log(result)
    })
  })
...

Автоматизируйте тестирование при каждом развертывании

Пришло время увидеть ваше красивое приложение в действии. Отправка кода на GitHub автоматически запустит тесты, определенные в вашем package.json (и развернет ваш код в среде staging). Просмотрите результаты результатов тестирования вашей последней сборки в представлении «Начать действие»:

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

  • Разверните приложение-пример тестирования Mocha, чтобы начать за 15 секунд: