😀
FuelPHP -- 1.5系でcomporserを導入する --
FuelPHP1.6からはcomposerが導入されるらしいですがまだdev版なので1.5系でcomposerを使用する為の方法を記載していきます
環境
- centos6.3
- fuelPHP1.5.3
事前準備に必要なもの
- php5.3以上
- mysql
- php[composer] 導入していない場合はcomposerを使ってみた時のメモを参考に導入してください。
参考にしたサイト
composerでいれるもの
ユニットテストを書くのでPHPUnit系のものを入れたいとおもいます。
今回入れるものは下記を入れます。
- phpunit/phpunit
- mockery/mockery
- phpunit/dbunit
- phpunit/phpunit-selenium
- phpunit/phpunit-story
- phing/phing
- pdepend/pdepend
- phpmd/phpmd
- squizlabs/php_codesniffer
- behat/behat
cd fuelPHPのカレントディレクトリ
vim composer.json
composer.json
{
"require": {
"phpunit/phpunit": "3.7.*",
"mockery/mockery": "0.7.*",
"phpunit/dbunit": ">=1.2",
"phpunit/phpunit-selenium": ">=1.2",
"phpunit/phpunit-story": "*",
"phing/phing": "dev-master",
"pdepend/pdepend": "dev-master",
"phpmd/phpmd": "dev-master",
"squizlabs/php_codesniffer": "dev-master",
"behat/behat": "2.4.*@dev"
},
"config": {
"bin-dir": "FuelPHPのカレントディレクトリのフルパス/fuel/app/vendor/bin",
"vendor-dir": "FuelPHPのカレントディレクトリのフルパス/fuel/app/vendor"
}
}
install
コマンド一発
cd fuelPHPのカレントディレクトリ
composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing mockery/mockery (0.7.2)
Loading from cache
- Installing symfony/yaml (v2.2.0)
Loading from cache
- Installing phpunit/php-text-template (1.1.4)
Loading from cache
.
.
.
.
mockery/mockery suggests installing Hamcrest (1.0.0)
phpunit/phpunit suggests installing phpunit/php-invoker (>=1.1.0,<1.2.0)
symfony/event-dispatcher suggests installing symfony/http-kernel (2.2.*)
behat/behat suggests installing behat/symfony2-extension (for integration with Symfony2 web framework)
behat/behat suggests installing behat/yii-extension (for integration with Yii web framework)
behat/behat suggests installing behat/mink-extension (for integration with Mink testing framework)
Writing lock file
Generating autoload files
確認
fuel/app/vendor/以下に入れたいパッケージがあればOK
ll fuel/app/vendor/
合計 4
-rw-r--r-- 1 root root 182 3月 20 14:55 2013 autoload.php
drwxr-xr-x 1 root root 136 3月 20 14:54 2013 behat
drwxr-xr-x 1 root root 306 3月 20 14:55 2013 bin
drwxr-xr-x 1 root root 272 3月 20 14:55 2013 composer
drwxr-xr-x 1 root root 102 3月 20 14:53 2013 mockery
drwxr-xr-x 1 root root 102 3月 20 14:53 2013 pdepend
drwxr-xr-x 1 root root 102 3月 20 14:53 2013 phing
drwxr-xr-x 1 root root 102 3月 20 14:54 2013 phpmd
drwxr-xr-x 1 root root 408 3月 20 14:54 2013 phpunit
drwxr-xr-x 1 root root 102 3月 20 14:54 2013 squizlabs
drwxr-xr-x 1 root root 306 3月 20 14:54 2013 symfony
PHPUnitの設定をconfigでオーバーライドする
このままではFuelPHPのテストをかくことができません。なぜならばFuelPHPのPHPUnitはデフォルトでフルパスで指定しないでphpunitコマンドで実行しようとするからです。
/fuel/packages/oil/config/oil.php
return array(
'phpunit' => array(
'autoload_path' => 'PHPUnit/Autoload.php' ,
'binary_path' => 'phpunit' ,
),
);
このpackageの設定ファイルをfuel/app/configにコピーして設定を変更しましょう
cp fuel/packages/oil/config/oil.php fuel/app/config/
fuel/app/config/oil.php
#編集前
'autoload_path' => 'PHPUnit/Autoload.php' ,
'binary_path' => 'phpunit' ,
#編集後
'autoload_path' => dirname(COREPATH).'/app/vendor/autoload.php' ,
'binary_path' => dirname(COREPATH).'/app/vendor/bin/phpunit' ,
fuel oil testコマンドが動くか確認してみる
確認しましょう
php oil test
Tests Running...This may take a few moments.
PHPUnit 3.7.18 by Sebastian Bergmann.
Configuration read from /home/web/lo.fuel.base.org/fuel/core/phpunit.xml
............................................................... 63 / 330 ( 19%)
............................................................... 126 / 330 ( 38%)
............................................................... 189 / 330 ( 57%)
............................................................... 252 / 330 ( 76%)
............................................................... 315 / 330 ( 95%)
...............
Time: 4 seconds, Memory: 21.75Mb
OK (330 tests, 350 assertions)
動きましたがこれだとfuel本体のテストを毎回していてウザいですね
phpunit拡張用にphpunit.xmlもpacakageから持ってくる
普段の開発ではcoreとpackage(Fuelが提供しているもの)はテストの必要がないはずなので設定を変更しましょう。
cp fuel/core/phpunit.xml fuel/app/phpunit.xml
fuel/app/phpunit.xml
#修正前
<testsuite name="core">
<directory suffix=".php">../core/tests</directory>
</testsuite>
#修正後
<!-- <testsuite name="core">
<directory suffix=".php">../core/tests</directory>
</testsuite> -->
再度確認
もう一回確認してfuel/app/phpunit.xmlに設定が向いているか確認しましょう
php oil test
Tests Running...This may take a few moments.
PHPUnit 3.7.18 by Sebastian Bergmann.
Configuration read from /home/web/lo.fuel.base.org/fuel/app/phpunit.xml
Time: 0 seconds, Memory: 3.50Mb
No tests executed!
fuel/app/phpunit.xmlの設定が反映されましたね。
PHPUnit以外のcomposerも動作させるためには
上記はこれはあくまでPHPUnitの設定だけで他のcomporserのパッケージはこれでは動きませんので
bootstrap.phpにcomposerのautoload.phpをreqiureしてあげましょう。
fuel/app/bootstrap.php
// Register the autoloader
Autoloader::register();
#追加
// Composer
require APPPATH.'/vendor/autoload.php';
ポイントはUsing Composer with FuelPHP 1.xでも記載されている通りにAutoloader::register();の後にcomposerのautoload.phpをrequireすることみたいです。(理由までは調べてませんが)
これでvendorパッケージ管理が容易になるかと思います。
Discussion