2016/05/26

[Laravel] 解決在 Windows 下 Laravel 跑 glup tdd 測試路徑及 phpunit 版本相衝問題

在 Laravel 執行 phpunit 測試有兩種方法

1. 直接下指令 phpunit

2. 搭配 Laravel-Elixir 執行 gulp tdd 或 gulp watch


遇雷環境一 (執行 phpunit):
  • Windows 10
  • Node.js 5.11.0
  • Laravel 5.2.32
  • PHPUnit 5.3.4



在此雖然是顯示 PHPUnit 4.8.26 (此為在 Laravel 裝的 PHPUnit 版本, 而本機上為 5.3.4)
卻會出現 PHP Fatal error, 產生 Exception

解決方法一:

將本機上的 phpunit 降版至 4.8.26

移除全域的 phpunit 版本
composer global remove phpunit/phpunit

安裝全域特定版本的 phpunit
composer global require "phpunit/phpunit=4.8.26"



再跑一次, 可以正確執行測試




遇雷環境二 (執行 gulp tdd):
  • Windows 10
  • Node.js 5.11.0
  • Laravel 5.2.32
  • PHPUnit 4.8.26

不管它顯示了什麼訊息, 這裡肯定是有問題的

查了 GitHub 上的 issue: Wrong path for phpUnit on Windows #518, 是與路徑格式有關

解決方法二:

目前已經有丟了一個 Pull Request: Gulp PhpUnit Fix for Windows #519 的解決方案

修改專案中 node_modules/laravel-elixir/tasks/phpunit.js 檔案



修改後的檔案如下 (綠底為變更行)

var gulp   = require('gulp');
var Elixir = require('laravel-elixir');

var config = Elixir.config;
var runTests = require('./shared/Tests.js');
var path = require('path');

/*
 |----------------------------------------------------------------
 | PHPUnit Testing
 |----------------------------------------------------------------
 |
 | This task will trigger your entire PHPUnit test suite and it
 | will show notifications indicating the success or failure
 | of that test suite. It works great with your tdd task.
 |
 */

Elixir.extend('phpUnit', function(src, command) {
    runTests(
        'PHPUnit',
        src || (config.testing.phpUnit.path + '/**/*Test.php'),
        command || (path.normalize('vendor/bin/phpunit') + ' --verbose')
    );
});


再看執行結果, 成功!!!



[2016/5/27] 更新筆記:

可以直接在 gulpfile.js 變更設定

var path = require('path');
mix.phpUnit([] , path.normalize('vendor/bin/phpunit') + ' --verbose');

[2016/06/03] 更新筆記:

Node.js 升級至 6.2.1 版本後, 再重新開新專案 Laravel 5.2.35 + Elixir 5.0 未再出現路徑問題

但 PHPUnit 的版本仍然維持適用在 v4.8.26

沒有留言: