Help us understand the problem. What is going on with this article?

Laravel5.6でPHPUnitのコードカバレッジを出力する

More than 1 year has passed since last update.

概要

MacOS上のLaravelのプロジェクトのコードカバレッジをHTML形式で出力します。
Laravelでプロジェクトが作成されており、PHPUnitが実行可能な状態を前提としています。
Xdebugのインストールについても手順を記載しています。

手順自体は簡単ですが、Xdebugのインストールで迷うことがあったので、メモとして記事にしています。

環境

  • Mac OS X Sierra 10.12.6
  • Laravel5.6
  • PHPUnit7.0

手順

composer.jsonのscript

カバレッジを出力するためのコマンドをcomposer.jsonのscriptに追加します。
カバレッジの結果がHTML形式でcoverageディレクトリに出力されるように修正しています。

composer.json
"scripts": {
        ・・・
    "test:coverage": "phpunit --coverage-html coverage"
}

phpunit.xml

Laravelにより作成された初期状態のphpunit.xmlでは、/app以下が全てテストの対象となっています。
テスト対象の絞り込みを行いたい場合、phpunit.xmlの以下の部分を修正する必要があります。

    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>

例えば、/app/modelsの配下のみテストしたい場合は、以下のようになります。
設定の詳細は、公式ガイドを確認してください。

    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app/models</directory> ここを変更!
        </whitelist>
    </filter>

カバレッジの出力

以下のコマンドを実行すると、coverageにカバレッジの結果が出力されていることを確認できます。

$ composer test:coverage

もし以下の通りXdebugがないとエラーが表示された場合は、Xdebugをインストールする必要があります。

Error: No code coverage driver is available

ここから下は、Xdebugをインストールする手順となります。

Xdebugをインストールする

Xdebugは、PHPUnitに組み込まれているのではなく、PHPのエクステンションとして公開されているデバッグ支援ツールです。
https://xdebug.org/download.php からXdebugのインストールが可能です。
以下のXdebugのサイトに必要な情報を入力することで、インストールするバージョンと手順について表示されるので、
以降はこれに従ってインストールを進めていきます。

Tailored Installation Instructions

上記のページを表示して、以下のコマンドで表示された内容を貼り付け、Analyse my phpinfo outputボタンをクリックします。

$ php -i

すると、インストールの手順が表示されるので、手順にしたがってインストール作業を進めます。
今回は、xdebug-2.6.1.tgzをインストールします。

ダウンロードしたファイルを適当なディレクトリで解凍します。以下のコマンドで解凍できます。

$ tar -xvzf xdebug-2.6.1.tgz

解凍したディレクトリに移動します。

$ cd xdebug-2.6.1

以下のコマンドを実行し、configureスクリプトを生成します。

$ phpize

以下のエラーが表示された場合は、 autoconfのインストールが必要です。

Cannot find autoconf. 
Please check your autoconf installationand the $PHP_AUTOCONF environment variable is set correctly and then rerun this script.

brewでautoconfをインストールして、エラーメッセージに表示されている通りに、環境変数を設定します。

$ brew install autoconf
$ export PHP_AUTOCONF=/usr/local/Cellar/autoconf/2.69/bin/autoconf

再び、以下のコマンドを実行します。

$ phpize

configureが作成されたので、以下を実行します。

$ ./configure

以下のコマンドを実行すると、modulesディレクトリにxdebug.soが作成されます。

$ make

作成されたxdebug.so をPHPのextensionsディレクトリに移動します。
extensionsディレクトリは、Tailored Installation Instructionsの手順に表示されているので
環境に合わせて変更してください。

$ cp modules/xdebug.so /usr/lib/php/extensions/no-debug-non-zts-20160303

/etc/php.ini に以下を追加します。

xdebug.soのパスは、環境に合わせて変更してください。

zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so

確認のために、以下のコマンドを実行します。

$ php -v
PHP 7.1.16 (cli) (built: Mar 31 2018 02:59:59) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans

Xdebugがインストールされていることが確認できました!

以下のコマンドを実行すると、coverageにカバレッジの結果が出力されていることを確認できます。

$ composer test:coverage

参考

PHPUnit公式ドキュメント:コードカバレッジ解析

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away