composerでPHPUnitを使うための覚え書き (Mac)

#導入手順
* homebrewでcomposerをインストール
* composerでPHPUnitをインストール
* PHPUnitの設定

＊便利かもと思い、composer・PHPUnit共に直接インストールでなく、homebrew,composerを利用しています。

#事前準備していたもの
* MAMP　(PHPバージョンは7.1.12)
* homebrew　(composerのインストール用)

#導入

##homebrewでcomposerをインストールする
インストールする前にhomebrewのアップデートの確認を念のため

```
$ brew update
```

composerのインストール

```
$ brew install composer
```

無事にインストールされたか確認

```
$ composer -v
```

こんなのが出力されればOK。

```
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.6.3 2018-01-31 16:28:17
```

#composerからPHPUnitをインストール
まずはターミナルからプロジェクトディレクトリへ移動

```
$ cd プロジェクトディレクトリ名
```

phpunitのインストール。**--dev**オプションをつけて開発用でインストール。

```
$ composer require phpunit/phpunit --dev
```
バージョンは現時点での最新が自動で選ばれます。
インストールが成功すると**composer.json**ファイルがプロジェクトディレクト内に作成されます。

```json:composer.json
{
    "require-dev": {
        "phpunit/phpunit": "^7.1"
    }
}
```

PHPUnitもインストールできているか一応確認

```
$ vendor/bin/phpunit --version
```

これが出てくればOK

```
$ PHPUnit 7.1.2 by Sebastian Bergmann and contributors.
```

#PHPUnitの設定

## xDebugを使えるようにする
xDebugはMAMPに標準で用意されている。でも、php.iniではコメントアウトされている。

###**1. php.iniの設定**
php.iniの場所は
**/Application/MAMP/bin/php/使用しているPHPバージョン/conf/**



コードの最後にxDebugの記述がある。

```php.ini
[xdebug]
#zend_extension="/Applications/MAMP/bin/php/php7.1.12/lib/php/extensions/no-debug-non-zts-xxxxxxxx/xdebug.so"
```

ここのコメントアウトを外して、下に記述を追加する。

```php.ini
[xdebug]
zend_extension="/Applications/MAMP/bin/php/php7.1.12/lib/php/extensions/no-debug-non-zts-xxxxxxxx/xdebug.so"
xdebug.coverage_enable=1 
xdebug.default_enable=1
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/tmp"
xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
```

＊ "no-debug-non-zts-xxxxxxxx"の**xxxxxxxx**部分は各々の環境で違うと思うのでコピペ注意です。php.iniを確認してください。

###**2. apacheを再起動**

ここでハマったのが、localhost内でphpinfo()を出力して確認するとxDebugが有効になっているのにも関わらず、コマンドラインではxDebugが有効になっていない。
これは、コマンドライン上ではMAMPのphpにPATHが通っておらず、Macに標準インストールされているphpが実行されていたのが原因でした。

 ```which php```で```usr/bin```が出力されているとMac標準のphpが実行されています。なので**.bash_profile**でPATHを変更してあげましょう。

```:.bash_profile
$ export PATH=/Applications/MAMP/bin/php/使用しているバージョン/bin:$PATH
```

.bash_profileの再読み込み

```
$ source .bash_profile
```

これでもう一度、```which php```で確認。```/Applications/MAMP/bin/php/使用しているバージョン/bin/php```が出ればOK。



## **phpunit.xml**の用意

* autoload.phpの事前読み込み
* 複数テストの実行
* カバレッジファイルの生成

```xml:phpunit.xml
<phpunit bootstrap="vendor/autoload.php">
	<filter>
		<whitelist processUncoveredFilesFromWhitelist="true">
			<directory suffix=".php">テストディレクトリ</directory>
		</whitelist>
	</filter>
	<testsuites>
		<testsuite name="まとめて実行したいテストのグループ名">
			<directory>テストディレクトリ</directory>
		</testsuite>
	</testsuites>
</phpunit>
```

###composer.jsonにコマンドを用意

```json:composer.json
{
    "require-dev": {
        "phpunit/phpunit": "7.0.3",
    },
    "scripts": {
    	"test": [
    		"vendor/bin/phpunit --testsuite グループ名"
    	],
    	"coverage": [
    		"vendor/bin/phpunit --coverage-html カバレッジファイルの出力ディレクト名 test/実行テストファイル"
    	]
    }
}

```

ここまで