LaravelをCircleCIで自動テストする方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
目次
Laravel を CircleCI で自動テストする方法について記事にしました。
この記事では、「自動デプロイ」はやりません。
あくまで、「テスト」の実行で詰まっている人向けの記事となります。
Laravel プロジェクトを CircleCI でテストする方法
今回の実装する方法としては、CircleCI 上でテスト用の sqlite(データベース)を作成し、そこでテストを実行するというやり方です。
CircleCI の管理画面で GitHub のリポジトリと紐付ける
これはログインしてリポジトリを選択してください。
GitHub と連携するので GitHub でログインするのがオススメです。
.env.testing を作成する
ローカルで使っている.env ファイルをコピーして、.env.example を作成します。
ローカルで見せてはいけない APIkey を設定しているとは思いませんが、
-
重要な情報は消しておいてください
-
データベースの設定を以下のようにコメントアウトしてください(以降記述する項目で設定するため)
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=8889
# DB_DATABASE=
# DB_USERNAME=root
# DB_PASSWORD=root
config/database.php に追加
テスト用の項目を増やします。
'sqlite_testing' => [
'driver' => 'sqlite',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE', storage_path('testing.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
混乱しやすいのは、
'database' => env('DB_DATABASE', storage_path('testing.sqlite')),
の部分で、これは
storage/testing.sqlite ファイルを SQLite の DB として使う設定です。
つまり、ファイルを storage/testing.sqlite に生成する必要があるというわけです。
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="sqlite_testing"/>
<server name="DB_DATABASE" value="storage/testing.sqlite"/>
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="TELESCOPE_ENABLED" value="false"/>
重要なのは、
<server name="DB_CONNECTION" value="sqlite_testing"/>
ここで、先ほど作成した設定を phpunit で使うようしています。
.circleci/config.yml ファイルを編 集する
# PHP CircleCI 2.0 configuration file
# See: https://circleci.com/docs/2.0/language-php/
version: 2
# Define a job to be invoked later in a workflow.
# See: https://circleci.com/docs/2.0/configuration-reference/#jobs
jobs:
build:
# Specify the execution environment. You can specify an image from Dockerhub or use one of our Convenience Images from CircleCI's Developer Hub.
# See: https://circleci.com/docs/2.0/configuration-reference/#docker-machine-macos-windows-executor
docker:
# Specify the version you desire here
- image: circleci/php:7.4-node-browsers
# Specify service dependencies here if necessary
# CircleCI maintains a library of pre-built images
# documented at https://circleci.com/docs/2.0/circleci-images/
# Using the RAM variation mitigates I/O contention
# for database intensive operations.
# - image: circleci/mysql:5.7-ram
#
# - image: redis:2.8.19
# Add steps to the job
# See: https://circleci.com/docs/2.0/configuration-reference/#steps
steps:
- checkout
# - run: sudo apt update # PHP CircleCI 2.0 Configuration File# PHP CircleCI 2.0 Configuration File sudo apt install zlib1g-dev libsqlite3-dev
# - run: sudo docker-php-ext-install zip
# Download and cache dependencies
- restore_cache:
keys:
# "composer.lock" can be used if it is committed to the repo
- v1-dependencies-{{ checksum "composer.json" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run: composer install -n --prefer-dist
- save_cache:
key: v1-dependencies-{{ checksum "composer.json" }}
paths:
- ./vendor
- restore_cache:
keys:
- node-v1-{{ checksum "package.json" }}
- node-v1-
- run: yarn install
- save_cache:
key: node-v1-{{ checksum "package.json" }}
paths:
- node_modules
- run:
name: "Create database and run migration"
command: |
touch storage/testing.sqlite
php artisan migrate --env=testing --database=sqlite_testing --force
# run tests with phpunit or codecept
- run:
name: "テスト"
command: |
./vendor/bin/phpunit
- php7.4
- vendor をキャッシュ化
- テスト用の DB を作成し、PHPUnit でテスト
これだけのミニマム設定です。
まとめ
以上です。
テストまでの記述ですので、自動デプロイの記述はこの後に付け足してみてください。
誰かの参考になればと思います。
感想・苦情は TwitterDM にご連絡ください。
それでは!
人気記事