設定過後的 PhpStorm 將可媲美 Visual Studio

很羨慕 Visual Studio 測試與除錯功能嗎?剛安裝好的 PhpStorm 只能算是一個文字編輯器,一旦設定了 PHP InterpreterXdebugPHPUnit 之後,PhpStorm 就搖身一變成為全功能的 IDE,功能足以媲美 Visual Studio。

Version


PHP 5.6.10
PhpStorm 10.0.1
MAMP PRO 3.4

設定 Xdebug


MAMP PRO 預設已經有安裝 Xdebug,只是在 php.ini 並沒有啟動,必須手動啟動後,再加上一些設定。

/Applications/MAMP/bin/php/php5.6.10/conf/php.ini
1
2
3
4
5
6
7
8
9
10
[xdebug]
zend_extension="/Applications/MAMP/bin/php/php5.6.10/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.profiler_enable=1

xdebug.profiler_output_dir="/Applications/MAMP/tmp"
xdebug.idekey=PHPSTORM

MAMP PRO 預設將 PHP 安裝在/Applications/MAMP/bin/php/phpX.X.XX/conf/php.ini,選擇版本加以修改php.ini1 1若不知道該改哪一個php.ini,可下php --ini指令,看看目前系統正在使用哪一個php.ini

其中 [xdebug] 位於 php.ini 的最後一行,預設使用 ; 註解,將 ; 拿掉,並加上以上的 Xdebug 設定。

存檔後須重新啟動MAMP。

設定 Interpreter


PhpStorm -> Preferences -> Language & Frameworks -> PHP
預設 Interpreter 還沒設定,按 ... 設定PHP interpreter。2 2PHP Interpreter每個專案都要重新設定一遍。

選擇 PHP 5.6.10 的路徑 : /Applications/MAMP/bin/php/php5.6.10/bin/php

若路徑正確,PhpStorm 會抓到 PHP 與 Xdebug 的版本。

從原本的 <no interpreter> 變成明確的 PHP (5.6.10)

設定 PHPUnit


PhpStorm -> Preferences -> Languages & Frameworks -> PHP -> PHPUnit

  1. 設定auloloader : 選擇 Use custom autoloader,下方選擇專案路徑下的 vendor/autoload.php
  2. 設定phpunit.xml : 在每個 Laravel 專案根目錄下都有一個 phpunit.xml,這是 Laravel 幫我們客製化過的 phpunit.xml

使用 PHPUnit 測試


對單一方法

在想要執行的 test method 內,按滑鼠右鍵選擇 Run XXX.XXX...,或按熱鍵 ⌃ + ⇧ + R,可單獨測試某一個test method。3 3除了可在 PhpStorm 執行測試外,使用 Laravel Elixir 自動跑測試也是不錯的方式,詳細請參考如何在 Homestead 自動執行測試?

若測試成功,會在下方左側顯示 綠燈,失敗則 紅燈,下方右側則顯示 PHPUnit 所傳回的訊息。我們發現僅通過了 1 個測試。

對單一類別

在任意 test method 外,按滑鼠右鍵選擇 Run XXX...,或按熱鍵 ⌃ + ⇧ + R,可單獨測試某一個 test class。

若測試成功,會在下方左側顯示 綠燈,失敗則 紅燈,下方右側則顯示 PHPUnit 所傳回的訊息。我們發現通過了該 test class 全部的 2 個測試。

全部測試

Run -> Run… 或按熱鍵 ⌃ + ⌥ + R。

選擇 tests->Runtests 這是 Laravel 預設的測試目錄。

我們可以發現通過了整個範例的 5 個測試。

使用 Xdebug 除錯


對單一方法

在想要 debug 的 test method 內,按滑鼠右鍵選擇 Debug XXX...,或按熱鍵 ⌃ + ⇧ + D,可單獨 debug 某一個 test method,只要執行過程中遇到中斷點就會停止。

對單一類別

在任意 test method 外,按滑鼠右鍵選擇 Debug XXX...,或按熱鍵 ⌃ + ⇧ + D,可單獨 debug 某一個 test class,只要執行過程中遇到中斷點就會停止。

全部除錯

Run -> Run… 或按熱鍵 ⌃ + ⌥ + D。

選擇tests->Debugtests 這是 Laravel 預設的測試目錄。

程式會停在設定中斷點的地方。

含 Coverage 測試


對單一方法

在想要計算 coverage 的 test method 內,按滑鼠右鍵選擇 Run XXX.XXX... with Coverage,可單獨測試某一個 test method 並計算 coverage。

對單一類別

在任意 test method 外,按滑鼠右鍵選擇 Run XXX.XXX... with Coverage,可單獨測試某一個 test class 並計算 coverage。

全部測試

Run -> Run… 或按熱鍵 ⌃ + ⌥ + R。

選擇 tests->Covertests 這是 Laravel 預設的測試目錄。4 4計算coverage非常耗時。

最後會在右方顯示整個專案的coverage。

Conclusion


  • 由於 PHP 是 script 的特性,很多人開發 PHP 都是使用 echo()var_dump()dd()來 debug,事實上 PhpStorm 搭配 Xdebug 之後,PHP 也能像 Java 與 C# 一樣,使用中斷點step by step 的方式來 debug。
  • PhpStorm 直接支援 PHPUnit,讓我們可以直接在 IDE 內執行測試,不用再透過 iTerm2 執行 PHPUnit,且可直接在 IDE 內顯示 coverage,非常方便。