LoginSignup
5
5

More than 3 years have passed since last update.

PHPUnitでHTMLコードカバレッジを出すまで(Docker使用)

Last updated at Posted at 2021-03-04

はじめに

以下記事の【phpunitを少し使ってみる】までは行っている前提で話します。

最終的表示までのものgithubにあげているのでもしよかったら見てください。
どこに何を書けばいいかもここのファイル等見てもらった方が早いかもです。

最終的な見た目は以下のような感じです。

スクリーンショット 2021-03-04 23.20.21.png
スクリーンショット 2021-03-04 23.20.33.png

上記の【phpunitさわるまで】以降にすること箇条書き

※HTMLでコードカバレッジを表示するのに必要な設定

  • 【step1】 tokenizer(拡張モジュール)追加
  • 【step2】 Xdebug(拡張モジュール)追加
  • 【step3】 php.iniの設定、反映(Xdebug(拡張モジュール)有効化)
  • 【step4】 phpunit.xml(コードカバレッジ出力のための設定ファイル的なもの)の作成
  • 【step5】 メソッドの修正
  • 【step6】 最後に出力コマンド

【step1】 tokenizer(拡張モジュール)追加

Dockerfileに以下追記
※ですがもしかしたらこれいらないかもしれないです、、すでに入ってる的なログ出てた気がするので念のため書いておきます、、

Dockerfile
RUN docker-php-ext-install tokenizer

【step2】 Xdebug(拡張モジュール)追加

Dockerfileに以下追記。すでに記述してある処理はそのままで。
ちなみに『apt-get』使用でインストール出来なかったのでこのインストールの方法で行っています。
peclのインストールがwget
インストールしたpeclでxdebugをインストールするという感じです。

インストール方法は以下の記述参考
https://pear.php.net/manual/en/installation.getting.php

peclでインストールできるもの以下
https://pecl.php.net/package-stats.php

Dockerfile
RUN apt-get update \
&& apt-get install -y \
wget

# コードジェネレーターで必要
RUN pecl install xdebug

【step3】 php.iniの設定、反映(Xdebug(拡張モジュール)有効化)

xdebug使えるようにするためphp.iniを自分で作成してDockerの環境に反映するをしました。

ちなみにextension=xdebug.soの記述書け!は以下リンク先に書かれていたもので
http://xdebug.org/docs/install

xdebug.mode=coverageの記述書け!は失敗ログで言われたものです。

Warning:       XDEBUG_MODE=coverage or xdebug.mode=coverage has to be set

Dockerfileに以下追記

Dockerfile
COPY html/php.ini /usr/local/etc/php/conf.d

php.iniを以下場所に作成

html/php.ini
extension=xdebug.so

xdebug.mode=coverage

【step4】 phpunit.xml(コードカバレッジ出力のための設定ファイル的なもの)の作成

:sun_with_face:『docker-compose.yml』ある場所で$ docker-compose up --build -dを叩きます。

:sun_with_face:以下コマンド今使用しているコンテナIDの確認を行う
$ docker ps

:sun_with_face:コンテナ内に以下コマンドで入る、 ※『1999d283b4f9』は上記で出力したコンテナIDを使用してください
$ docker exec -i -t 1999d283b4f9 bash

:sun_with_face:phpunit.xmlの作成コマンドを打つ、そして聞かれた内容に答えていく

$ vendor/bin/phpunit --generate-configuration

【step5】 メソッドの修正

テストメソッド上の何のテストをするかを記述(@coversの部分)
これないとThis test does not have a @covers annotation but is expected to have oneと言われます。

    /**
     *  @covers sample\Sample::a
     **/
    public function testA()

全体
https://github.com/sachiko-kame/samplePHPTest/blob/main/html/TEST/SampleTest.php

【step6】 最後に出力コマンド

これで『TestResult』フォルダ内に無事index.htm等々作成出来て表示に問題がなければOKです!
うまくいかない場合『phpunit.xml』が同じでない可能性が高いと思うので以下と見合わせていただければと思います。
https://github.com/sachiko-kame/samplePHPTest/blob/main/html/phpunit.xml

$ vendor/bin/phpunit --coverage-html TestResult

参考

https://tech-blog.rakus.co.jp/entry/20200908/docker
https://docs.docker.jp/engine/reference/builder.html#copy
その他所々にリンク貼ってます!

5
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5