Акведук и в базе данных
Просто хотел узнать, поддерживает ли Aqueduct ORM простую в памяти базу данных, для целей тестирования. Ищите что-то простое и легкое для написания бэкэнда, прежде чем подключать его к postgres.
2 ответа
Акведук был построен для тестирования на локально работающем экземпляре PostgreSQL. Это позволяет избежать класса ошибок, возникающих при использовании другого ядра базы данных в тестах и развертывании. Это очень важная особенность акведука.
Tl;dr заключается в том, что вы можете использовать локальный экземпляр PostgreSQL с той же эффективностью, что и в базе данных в памяти, и имеется документация по единовременному процессу установки.
Детали
Aqueduct создает промежуточное представление вашей модели данных при запуске, отражая код вашего приложения. Это представление управляет миграцией базы данных, сериализацией, отражением во время выполнения и даже может быть экспортировано как JSON для создания инструментов моделирования данных поверх Aqueduct.
В начале каждого набора тестов ваш тестовый комплект использует это представление для создания временных таблиц в локальной базе данных с именем dart_test
, Временные таблицы уничтожаются, как только теряется соединение с базой данных; который вы можете настроить для выполнения между тестами, группами тестов или целыми наборами тестов в зависимости от ваших потребностей. Оказывается, это очень быстро - порядка миллисекунд.
Платформы CI, такие как TravisCI и Appveyor, поддерживают локальные процессы PostgreSQL. Посмотрите этот скрипт и эту конфигурацию travis для примера.
Я использовал аналогичный подход с H2 и Postgres с Java, но он довольно подвержен ошибкам: хотя интерфейс SQL может быть похожим, вы можете использовать функцию, которая доступна в одном, но не в другом. В конце концов, либо ваша разработка заблокирована, либо все в порядке, но тогда реальное развертывание будет сталкиваться с проблемами.
Я обнаружил, что запуск экземпляра Postgresql в докере гораздо проще, чем я думал, и теперь я использую тот же принцип для большинства внешних зависимостей: запускаю их в докере. Если есть интерес, я могу открыть исходный код пакета Dart, который запускает Docker-контейнер и ждет, пока на выходе не появится определенный строковый шаблон (например, отчет об успешном запуске).