Web Analytics Made Easy - StatCounter
Главная Блог Использование sqlite in memory для тестирования с помощью phpunit в Laravel

Sqlite in memory для тестирования с помощью phpunit в Laravel

Sqlite in memory для тестирования с помощью phpunit в Laravel

Если вы тестируете ваше приложение на Laravel используя какую-либо систему CI, вы наверняка используете sqlite, как легковесную базу, чтобы не тащить зависимость на mysql или mssql с собой, в эту систему.

Вы возможно могли не знать что у sqlite есть одна очень интересная возможность и я не могу не упомянуть о ней. Эта возможность позволяет вам не создавать специальный файл для хранения sqlite базы, а разместить её прямо в память системы, что очень удобно как раз для тестирования. Для этого вам нужно добавить несколько модификаций в наше приложение на Laravel.

Для начала вам нужно модифицировать наш файл config/database.php добавив в раздел connections следующие строки:

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

Что позволит вам использовать в качестве параметра database connection значение sqlite_memory.

Так же вам нужно обновить наш файл phpunit.xml который находится в корне нашего приложения и отвечает за конфигурацию работы phpunit по умолчания, добавив в него следующее значение:

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

И наконец последний пункт, вам нужно чтобы наше приложение во время начала тестирования, накатило на эту базу migrations и seeds, а значит вам нужно обновить наш файл tests/CreateApplication.php добавив в него переопределение метода setUp следующим образом

public function setUp() { parent::setUp(); \Artisan::call('migrate'); \Artisan::call('db:seed'); } 

Проведение этих манипуляций позволит вам больше не беспокоиться о создании либо удалении файла sqlite базы. И даже о использовании DatabaseTransactions trait в наших тестах (однако рекомендую все же не забывать о нем).

источник Использование sqlite in memory для тестирования с помощью phpunit в Laravel
автор Дмитрий Бойко