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 にご連絡ください。
それでは!
人気記事