よっしー
こんにちは。よっしーです(^^)
今日は、docker で環境構築した CodeIgniter に DBの単体テスト を追加する方法についてご紹介します。
前提条件
この記事では、Dockerでの環境構築が完了していることを前提にしています。環境構築の方法については、下記の記事を参考にお願いします。
修正内容
flyway/conf/flyway-test.conf
下記の内容で新規ファイル(flyway-test.conf)を作成します。
flyway.url=jdbc:mysql://mysql-test/sample_test
flyway.user=root
flyway.password=P@ssw0rd
web/CodeIgniter-3.1.13/application/config/testing/database.php
config/database.phpをconfig/testing/database.phpにコピーして、コピーしたファイルに下記の修正をします。(78行目)
'hostname' => 'mysql-test',
テスト用データベースの接続設定になります。
web/CodeIgniter-3.1.13/application/tests/controllers/Sample_test.php
下記の内容で新規ファイルを作成します。コントローラのテストケースとしていますが、本来であれば、モデルのテストケースとするのですが、今回はモデルにするのを省略しています。
<?php
class Sample_test extends DbTestCase
{
public function test_index()
{
$this->hasInDatabase('sample', [
'name' => 'unit test'
]);
$output = $this->request('GET', 'sample/index');
$this->assertStringContainsString('test<br />テスト2<br />てすと3<br />unit test<br />Total Results: 4', $output);
}
}
docker-compose.yml
下記の内容になります。赤字が修正箇所になります。
version: '3'
x-template: &flyway-cmd
build: ./flyway
volumes:
- ./flyway/sql:/flyway/sql
- ./flyway/conf:/flyway/conf
depends_on:
- mysql
profiles:
- flyway
networks:
- net
x-mysql: &mysql-base
build: ./mysql
platform: linux/x86_64
volumes:
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
networks:
- net
services:
web:
build: ./web
container_name: web
platform: linux/x86_64
privileged: true
volumes:
- ./web/CodeIgniter-3.1.13/application:/var/www/application
- ./web/CodeIgniter-3.1.13/system:/var/www/system
- ./web/index.php:/var/www/html/index.php
- ./web/info.php:/var/www/html/info.php
- ./web/.htaccess:/var/www/html/.htaccess
- ./web/httpd.conf:/etc/httpd/conf/httpd.conf
- ./web/xhprof-html.conf:/etc/httpd/conf.modules.d/xhprof-html.conf
- ./web/xdebug.ini:/etc/opt/remi/php74/php.d/xdebug.ini
ports:
- 8080:80
networks:
- net
mysql:
<<: *mysql-base
container_name: mysql
ports:
- 127.0.0.1:3306:3306
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
TZ: ${TZ}
mysql-test:
<<: *mysql-base
container_name: mysql-test
ports:
- 127.0.0.1:3307:3306
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}_test
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
TZ: ${TZ}
flyway-cmd:
<<: *flyway-cmd
flyway-baseline:
<<: *flyway-cmd
command: baseline
flyway-migrate:
<<: *flyway-cmd
command: migrate
flyway-info:
<<: *flyway-cmd
command: info
networks:
net:
ビルド&起動
下記の手順でビルドして、起動させます。起動後に、テスト用のテーブルとデータを登録しています。
docker compose build
docker compose up -d
docker compose run --rm flyway-cmd info -configFiles=/flyway/conf/flyway-test.conf
docker compose run --rm flyway-cmd baseline -configFiles=/flyway/conf/flyway-test.conf
docker compose run --rm flyway-cmd migrate -configFiles=/flyway/conf/flyway-test.conf
テスト実施
下記の手順でテストを実施します。すべてOKになれば、DBの単体テストの動作確認は終了です。
docker-compose run web sh -c "cd /var/www/application/tests && /var/www/vendor/bin/phpunit"
おわりに
今日は、docker で環境構築した CodeIgniter に DBの単体テスト を追加する方法についてご紹介しました。これで、DBの単体テストが可能になりました。
なお、ここに記載のDocker関連のファイルは、下記のGitHubにあります。
よっしー
また明日お会いしましょう!
コメント