Тестирование API и микросервисов должно быть неотъемлемой частью рабочего процесса разработчиков. Сервисы часто взаимодействуют с базой данных, поэтому сохранение вашего хранилища данных в удобном для тестирования формате имеет неоценимое значение.
В этой статье будут показаны примеры использования JavaScript;
- Objection.js как ORM.
- Knex.js как конструктор сиквелов.
- Шутка как среда тестирования.
Просто интересуетесь исходным кодом? Вы можете найти его здесь: https://github.com/mw999/use-database-transactions
Я всю свою карьеру разработчика писал в равных частях PHP (Laravel) и JavaScript, любя аспекты обоих. Одна из моих любимых функций Laravel - это особенности тестирования базы данных, обеспечивающие очистку после каждого теста, гарантируя, что каждый тест выполняется изолированно.
Мой идеальный рабочий процесс тестирования был бы.
- Перенести базу данных (при необходимости можно добавить данные).
- Начать транзакцию.
- Войдите в тест - создавайте строки, утверждайте результаты, делайте наш код непробиваемым.
- Зафиксируйте транзакцию и откатите ее.
- Переходите к следующему тесту.
Мы будем тестировать модель пиццы, которая состоит из одного столбца базы данных, его имя. Первым делом мы создадим пиццу. В качестве ORM мы будем использовать objection.js, очень похожий на Eloquent в Laravel. Единственное обязательное свойство модели - это имя таблицы. Затем мы создадим миграцию с помощью knex, определив схему для нашей базы данных MYSQL.
Далее наш тест. Мы хотим убедиться, что модель пиццы построена правильно, что позволяет нам вставить новую запись в таблицу базы данных. Мы также хотим откатывать базу данных после каждого теста, используя нашу еще не созданную функцию useDatabaseTransactions()
, которая очень похожа на use DatabaseTransactions;
в Laravel.
Откат транзакций осуществляется через objection.js. Мы определяем наш тестовый экземпляр knex, инициализируем objection.js с нашей тестовой базой данных, а затем запускаем транзакцию базы данных. Мы храним ссылку на эту транзакцию, откатывая ее после каждого теста. Простой!
Использование этой техники позволяет нам сосредоточиться на тестировании, не беспокоясь о том, что база данных находится в не тестируемом состоянии. Когда тест не проходит, теперь мы знаем, что он будет ограничиваться только этим одним тестом.
Получайте удовольствие от тестирования вашего кода!