CodeIgniterの環境構築方法:DBの単体テスト導入

スポンサーリンク
CodeIgniterの環境構築方法:DBの単体テスト導入 ノウハウ
CodeIgniterの環境構築方法:DBの単体テスト導入
この記事は約7分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、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にあります。

よっしー
よっしー

また明日お会いしましょう!

コメント

タイトルとURLをコピーしました