簡體   English   中英

PHPUnit 通過 Composer 和 PhpStorm

[英]PHPUnit via Composer and PhpStorm

我現在花了幾個小時來設置 PhpStorm 進行單元測試。 無論我做什么,我都明白

Process finished with exit code 1
Cannot find PHPUnit in include path ...

PHPUnit 可以(通過命令行)從任何地方訪問; 我已經設置了正確的包含路徑並將 PHPUnit 添加到外部庫中。 沒有機會。

完全有可能還是只能通過 PEAR 安裝? 我已經在這里解決了所有相關問題,我在 Mac 上,PHPUnit 通過 CLI 順利運行。

@ aderuwe的答案有效,但該配置不是每個項目的范圍,它適用於所有項目。 從PHPStorm 6(實際上甚至是EAP版本PS-126.260 )開始,您可以執行以下操作:

  1. 轉到File - > Settings - > PHP - > PHPUNIT
  2. 選擇“ Use custom loader ,然后從項目供應商目錄中輸入autoload.php文件。 此自動加載器將自動加載Composer管理的所有依賴項(包括PHPUnit)。
  3. 指定默認配置文件(這通常是項目app目錄中的phpunit.xml.dist )。

<code> PHP </ code>  - > <code> PHPUNIT </ code>

需要每個項目進行重復 ,但下面需要做一次

您需要正確配置PHPStorm中的默認值。

  1. 轉到Run - > Edit Configurations...或只需單擊工具欄上的下拉菜單,然后選擇Edit Configurations...
  2. 轉到Defaults - > PHPUnit
  3. 在“ Test Scope ,選擇“ Defined in configuration file
  4. 確保Interpreter options文本字段為空
  5. 轉到PHPUnitDefaults以上)並刪除其下的任何條目(以便下次對特定文件進行測試等時,它將設置一個新的但使用新的默認值)。

<code>編輯配置...... </ code>

Patrick Visma在http://youtrack.jetbrains.com/issue/WI-13429上發布了解決方案:

在PHPStorm中編輯phpunit.xml的配置,並設置如下的Interpreter選項:

-d auto_prepend_file=/path/to/vendor/autoload.php

我猜想PhpStorm依賴於在php.ini本身的include_path中找到PHPUnit,而不是你的項目。

您可以嘗試將本地項目的vendor / bin目錄添加到php.ini的include_path,但最終看起來像PhpStorm可能會受益於支持作曲家安裝並運行項目本身的phpunit(如果可用)。 實際上他們的跟蹤器上有一個問題,所以我建議您登錄並提升它:http: //youtrack.jetbrains.com/issue/WI-13429

我想補充一點,當前版本的PHPStorm(7.1)僅適用於以前版本的PHPUnit (3.7)。 它無法與4.0及更高版本一起使用。 如果您從http://phpunit.de下載了phpunit.phar,可以通過Settings => PHP => PHPUnit => phpunit.phar的路徑將PHPStorm指向它

PHPStorm有一個自定義的PHPUnit運行腳本( ide-phpunit.php ),它在內部用於處理不同版本的PHPUnit並進行IDE集成,這只是依賴於包含路徑和PEAR文件夾布局。

為此,它執行:

public static function checkIncludePath()
{
    //check include path
    $PHPUnitParentDirectory = self::getPHPUnitParentDirectory();
    if (is_null($PHPUnitParentDirectory)) {
        echo "Cannot find PHPUnit in include path (" . ini_get('include_path') . ")";
        exit(IDE_PHPUnit_Loader::FAILURE_EXIT);
    }
}

/**
 * @return null | string
 */
private static function getPHPUnitParentDirectory()
{
    $pathArray = explode(PATH_SEPARATOR, ini_get('include_path'));
    foreach ($pathArray as $path)
    {
        if (file_exists($path . DIRECTORY_SEPARATOR . 'PHPUnit/')) {
            return $path;
        }
    }
    return null;
}

您可以通過composer安裝它並將其添加為普通可執行文件(ant / phing / native任務),但是您將失去PHPStorm提供的所有閃亮功能,如進度條,跳轉到失敗的測試和代碼覆蓋率支持。

因此,從代碼中可以看出,您需要將名為PHPUnit的文件夾添加到包含路徑中的某個位置。 添加供應商可能對此有所幫助,但請記住這樣做時需要匹配大小寫

直到PHPStorm支持使用來自composer或phar的PHPUnit我不認為你會從pear中使用它來獲得更好的集成( http://youtrack.jetbrains.com/issue/WI-13429 )但是你的包含路徑的黑客可能會解決。

PHPStorm的人在3.7的跑步者上做了一些更新,並且通常對PHPUnit的變化做出很好的響應:)

我發現如果我擁有所有的“Test”目錄,並且在配置文件“Test / phpunit.xml”中定義了測試套件; 我可以簡單地設置一個“運行配置”,如下所示:

  1. 單擊“運行”|打開“運行/調試配置”對話框 編輯配置
  2. 單擊工具欄上的+ ,然后選擇PHPUnit (用於本地執行的單元測試)。
  3. 根據您的喜好填寫頂部的名稱
  4. 測試范圍設置為測試所在的目錄。
  5. 單擊確定
  6. 然后運行新配置。

phpstorm  - 運行 - 配置 - 對話

Phpstorm Run |配置對話框

可能對其他人有幫助.. PHPStorm 通過 Composer 成功找到了我的本地 PHPUnit,但系統提示“無法在 'vendor/autoload.php' 中找到自動加載器腳本”並且無法運行我的測試。

通過使用絕對路徑修復了這個問題,例如/Users/Me/my-project/vendor/autoload.php

找不到自動加載器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM