Laravelのプロジェクトでテストコードを書くことになり、codeceptionを利用することにしたので、導入までのメモ書きです。
前提
ローカル環境は以下です。
- PHP7
- Laravel5.4
- MySQL5.7.18
- composer1.4.1
codeception
Laravelのルートでインストールします。
cd /path/to/LaravelProject
composer require codeception/codeception --dev
codeceptionのセットアップをします。
composer exec codecept bootstrap
とりあえずテストを走らせます。
composer exec codecept run
↑こちらのコマンドではエラーになる、、、以下エラー。
Script codecept handling the __exec_command event returned with error code 1
なので直接実行します。
/path/to/LaravelProject/vendor/bin/codecept run
まだ何もテストを書いていないので、動作確認のみです。
MySQL
MySQLにログインしてテスト用DBを作成します。
mysql -u root -p
CREATE DATABASE {DBNAME} CHARACTER SET utf8mb4;
Laravel
テスト用のdotenvを用意します。
cd /path/to/LaravelProject
cp .env .env.testing
vi .env.testing
以下に書き換えます。
APP_ENV=testing
APP_KEY={YOUR_KEY}
DB_CONNECTION=mysql
DB_HOST={YOUR_HOST}
DB_PORT=3306
DB_DATABASE={YOUR_DBNAME}
DB_USERNAME={YOUR_USER}
DB_PASSWORD={YOUR_PASSWORD}
ここで自分は、テスト用DBに開発用DBの内容をdumpしました。
mysqldump -uroot -p {MY_DBNAME} > {MY_DBNAME}.dump
mysql -uroot -p {MY_TESTING_DBNAME} < {MY_DBNAME}.dump
ymlの編集
/path/to/LaravelProject/tests/
にymlが出来上がっているので編集します。
unitとfunctionalしかいじらなかったので、受入テストのテストコードを実施する場合は別途対応する必要があります。
- unit.suite.yml
# Codeception Test Suite Configuration
#
# Suite for unit or integration tests.
actor: UnitTester
modules:
enabled:
- Asserts
- \Helper\Unit
- Laravel5:
part: ORM
environment_file: .env.testing
run_database_migrations: true
- functional.suite.yml
# Codeception Test Suite Configuration
#
# Suite for functional tests
# Emulate web requests and make application process them
# Include one of framework modules (Symfony2, Yii2, Laravel5) to use it
# Remove this suite if you don't use frameworks
actor: FunctionalTester
modules:
enabled:
- Laravel5:
environment_file: .env.testing
run_database_migrations: true
- \Helper\Functional
これであとはテストコードを書くだけです。
以下にテストコード作成の参考記事を記載しております。