CircleCIでLaravelのMySQLを使ったテストを実行する

  • 5
    いいね
  • 1
    コメント

概要

LaravelのMySQLを使ったテストをCircleCI上で実行します。
CircleCI上でマイグレートとシーディングを行い、
テストデータが入った状態でテストを実行できるようにします。

やることは

  • Laravel側にCircleCI用のデータベース設定を追加
  • circle.ymlにテスト用の設定を追加

の2つです。

Laravel側にCircleCI用のデータベース設定を追加

CircleCIのMySQLの設定のデフォルト値は

設定項目
database circle_test
username ubuntu
password 空文字

というふうにあらかじめ用意されているので、特に問題なければ以下のようにします。

config/database.php
    'connections' => [
        'circle_test' => [
            'driver' => 'mysql',
            'host' => '127.0.0.1',
            'port' => '3306',
            'database' => 'circle_test',
            'username' => 'ubuntu',
            'password' => '',
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
    ]

circle.ymlにテスト用の設定を追加

circle.ymlに設定を追加して、マイグレーションとシーディングができるようにしていきます。

最終的には

circle.yml
machine:
  php:
    version: 7.1.0
  environment:
    DB_CONNECTION: circle_test
    APP_ENV: testing
  services:
    - mysql

database:
  override:
    - "php artisan migrate"
    - "php artisan db:seed"

こんな感じになります。

環境変数を追加

circle.yml
machine:
  php:
    version: 7.1.0
  environment:
    DB_CONNECTION: circle_test
    APP_ENV: testing
  services:
    - mysql

DB_CONNECTIONに先ほどLaravelの方で設定したcircle_testを指定します
APP_ENVにtestingを指定しています。
これを指定しないとFeatureテストでPOSTをテストする時にCSRFトークンのチェックでテストがコケます。

マイグレートとシーディングを実行

circle.yml
database:
  override:
    - "php artisan migrate"
    - "php artisan db:seed"

見たままです。