0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel6のテスト用データベースをsqliteにする

Last updated at Posted at 2021-08-29

テストのためにデータベースをもう一つ用意するのがおっくうだったので、
sqliteを使ってみました。

sqliteで使うファイルを作成

touch database/laravel_db.sqlite  

sqliteの設定を変更

config/database.php


'connections' => [

        'testing_sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DATABASE_URL'),
            'database' => env('DB_DATABASE', database_path('laravel_db.sqlite')), //作成したファイルのパスに変更
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
        ],


phpunit.xmlの設定

phpunit.xml

<server name="APP_ENV" value="testing"/>
        <server name="BCRYPT_ROUNDS" value="4"/>
        <server name="CACHE_DRIVER" value="array"/>
        <server name="DB_CONNECTION" value="testing_sqlite"/> // database.phpで設定しているデータベース名に変更
        <server name="DB_DATABASE" value="./database/laravel_db.sqlite"/> //作成したファイルのパスに変更

テスト実行

./vendor/bin/phpunit

めちゃめちゃ楽です。

補足

sqliteはインメモリを使っているのでデータが必要なテストをする場合、その都度データを投入する必要があります。データを事前に準備したいときは、テストクラスに以下のような処理を書いておくといいです。

テスト前にデータを用意

参照
https://qiita.com/pomechan0505/items/288b3a7f4622e170d7fe

テスト実行時、テストクラスで最初に実行されるテストの前に一度だけphp artisan migrate:fresh —seedが実行される

class hogehogeTest extends TestCase
{
    private static $isSetUp = false;

    protected function setUp():void
    {
        parent::setUp();

        if(self::$isSetUp === false) {

            $this->artisan('migrate:fresh --seed'); // php artisan migrate:fresh --seedコマンド実行
            self::$isSetUp = true;
        }
    }

}

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?