Как создать базу данных в памяти для тестирования PHPUnit? - PullRequest
1 голос
/ 19 июня 2019

Я новичок в PHPUnit (и модульное тестирование в целом). Я хочу работать над набором тестов, который разработчики могут запускать локально, но также могут запускаться в нашей системе интеграции (Codeship). Я понимаю, что можно использовать базу данных в памяти, но похоже, что она зависит от миграций, которые мы не используем (кажется, не очень хорошо обрабатывают представления, хранимые процедуры, функции, триггеры и т. Д.?) .

Как лучше всего (поместить в Laravel) 1) создать базу данных в памяти и заполнить базу данных данными по умолчанию (которые будут использоваться для ВСЕХ испытаний)?

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Это не тот ответ, который вы, возможно, ищете, но скорее альтернативное решение для рассмотрения.

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

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

Тамтакже могут возникнуть нюансы (скорее всего, очень незначительные) между запуском базы данных в памяти и тем, как будет работать ваша производственная база данных, что в конечном итоге подорвет целостность ваших тестов и может в конечном итоге даже дать вам ложные срабатывания.Это будет особенно актуально, если вы используете конструктор запросов, и вам может понадобиться на самом деле разрабатывать разные запросы (например, разные синтаксисы между MySQL и sqlite) в зависимости от того, в какой среде вы выполняете сам запрос.

1 голос
/ 19 июня 2019

Вы можете использовать SQLite.

Из документов:

База данных SQLite обычно хранится в одном обычном файле на диске. Однако при определенных обстоятельствах база данных может храниться в памяти.

Добавьте это в config/database.php файл:

'sqlite_testing' => [
    'driver'   => 'sqlite',
    'database' => ':memory:',
    'prefix'   => '',
],

В файле phpunit.xml, под узлом <php>:

<env name="DB_CONNECTION" value="sqlite_testing" />

Подробнее здесь .

Другое решение

Создайте тестовую базу данных в папке storage/ с именем database.sqlite или, если вам нужно другое имя или другое местоположение, вы должны изменить конфиги в файле config / database.php, это конфиги по умолчанию:

'sqlite' => [
    'driver'   => 'sqlite',
    'database' => storage_path('database.sqlite'),
    'prefix'   => '',
],

Используйте эту команду для запуска ваших миграций:

php artisan migrate --database=sqlite

Или добавьте эту строку в файл .env:

DB_CONNECTION=sqlite

Ваше приложение использует sqlite для phpunit .

Теперь вы можете запускать миграции и тестировать. После этого просто измените DB_CONNECTION на базу данных, которую вы используете для своего проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...