2014-10-17 101 views
0

我遇到了使用作曲家psr-4自動加載功能和PHPUnit的問題。問題出現在我的本地機器以及TravisCI版本上。單元測試無法找到我的課程,而正常腳本做作曲者自動加載失敗PHPUnit

任何配置肯定有問題,但我無法弄清楚我做錯了什麼。在此先感謝您的幫助。

這裏是我的項目文件結構:

  • 公共/
  • 的src/
    • HTTP/
      • urlhelper.php
    • lib.php
  • 測試/
    • blacktie/
      • HTTP/
        • urlhelper.test.php
      • lib.test.php
    • bootstrap.php中
    • 測試用例。 php
  • .travis.yml
  • composer.json
  • 的init.php
  • phpunit.xml

這裏就是我的composer.json樣子:

{ 
    "require": { 
     "php": ">=5.4.0", 
     "nesbot/carbon": "1.*", 
     "ext-pdo": "*", 
     "predis/predis": "1.1.*@dev" 
    }, 
    "require-dev": { 
     "satooshi/php-coveralls": "dev-master", 
     "phpunit/phpunit": ">=3.7" 
    }, 
    "autoload": { 
     "psr-4": { 
      "BlackTie\\": "src/blacktie" 
     } 
    } 
} 

PHPUnit配置定義了一個引導程序,其中包括每個require_once腳本共享的腳本艾因項目和測試,以初始化PSR-4自動加載機和常用功能:的init.php

define('ROOT', __DIR__); 

// Composer-Autoloader 
require_once "vendor/autoload.php"; 

// Framework library with common functions 
require_once "src/blacktie/lib.php"; 

Travis的命令行說:對我

PHP Fatal error: Class 'BlackTie\Http\UrlHelper' not found in /home/travis/build/jazzschmidt/black-tie/tests/blacktie/http/urlhelper.test.php on line 38

回答

1

正如你已經發現的,爲了讓你的代碼在Linux系統上正常工作,你需要有正確的類名。

它在Mac上本地工作的原因是OSX沒有完全區分大小寫的文件系統。儘管它保留了文件和目錄的情況,但它將不同的文件名解析爲相同的存儲路徑,例如,

$ touch foo.txt 
$ touch Foo.txt 
$ ls -l 
total 0 
-rw-r--r-- 1 danack admin 0 18 Oct 16:32 foo.txt 
$ touch Bar.txt 
$ touch bar.txt 
$ ls -l 
total 0 
-rw-r--r-- 1 danack admin 0 18 Oct 16:32 Bar.txt 
-rw-r--r-- 1 danack admin 0 18 Oct 16:32 foo.txt 

它類似認爲pre-composed and de-composed版本的字符是相同的。即E(U + 00E9)是E(U + 0065)和組合重音符(U + 0301)

這樣的一個示例可以通過PHP顯示更容易:

<?php 

touch("Am\xC3\xA9lie.txt"); 
touch("Am\x65\xCC\x81lie.txt"); 

結果在生成單個名爲「Amélie.txt」的文件。

儘管起初看起來很麻煩,但這意味着應用程序不需要擔心字符的分解,並且您不會突然發現一個應用程序會使用一個表示保存文件,然後另一個應用程序會保存它作爲一個不同的表示。

0

恥辱 - 我錯過了作曲家自動加載功能處理文件區分大小寫。所以爲了得到在Travis上運行的測試,我只需要調整文件和目錄的名稱。 但我不明白,爲什麼它在運行OS X的本地機器上工作,它也使用區分大小寫的文件系統,它是幹什麼用的?

希望我能幫助遇到同樣問題的人。