CakePHP2では結構お世話になりました(不具合の方向で。。。)
CakePHP3ではすんなりいくかな?と思っていたけど、ダメでした。むー。なんででしょう?
とりあえずphpunitインストール
composerでインストールしました。
$ composer require --dev phpunit/phpunit
自作プラグインのロードエラー
チュートリアル通り、実行しようとするとエラーが発生。
$ ./vendor/bin/phpunit Cannot load Xdebug - extension already loaded Exception: Plugin MyPlugins could not be found. in [../TestController.php]
???
色々試してみたら、phpunitだけじゃなくて、/bin/cake
コマンドもエラーがでているっぽい
???
デバッグしてたらわかった。
<?php // ...省略 // 112行目ぐらい public static function load($plugin, array $config = []) { // ... 省略 if (empty($config['path'])) { $paths = App::path('Plugin'); $pluginPath = str_replace('/', DIRECTORY_SEPARATOR, $plugin); foreach ($paths as $path) { if (is_dir($path . $pluginPath)) { $config['path'] = $path . $pluginPath . DIRECTORY_SEPARATOR; break; } } } if (empty($config['path'])) { // ここでエラーが発生している throw new MissingPluginException(['plugin' => $plugin]); }
どうやら自作したPluginがロードできていないっぽい。なぁーぜぇー?
あ!
- ~/config/bootstrap.php
<?php // ...省略 Plugin::load('MyPlugins', ['autoload' => true, 'bootstrap' => true, 'routes' => true]);
実際のディレクトリは~/plugins/my_plugins/
だったので、キャメルケース変換とかそんな処理がないからエラーになっているっぽい。
- ~/config/bootstrap.php
<?php // ...省略 // plugin名修正 Plugin::load('my_plugins', ['autoload' => true, 'bootstrap' => true, 'routes' => true]);
修正したらうまくいった。(ってかphpunitのエラーと関係ない。凡ミス)
何故かIDEでの実行結果とコンソールの実行結果が違う。
これも自分のところだけ。ってか考え方でした。
IDEのコマンドはこんな感じ
$ ~/vendor/bin/phpunit
コンソールはこんな感じ
$ ./vendor/bin/phpunit
おわかりいただけただろうか・・・・?
ようは相対なのか絶対なのかって話ですよ。この場合絶対パス指定のIDEはただphpunitを実行するだけで、help内容が出力されるだけ。
IDEで使いたい場合はパラメータも含めすべて絶対パスで指定してあげてください。
$ ~/vendor/bin/phpunit --bootstrap ~/tests/bootstrap.php ~/tests/
何故かtableが認識されない
$ ./vendor/bin/phpunit ... Cake\Database\Exception: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test_table.post_meta' doesn't exist ...
こんなエラーが。。。と思いきや、単純にアプリケーション側のモデルロード処理の名前が間違っていました。。。。orz
2016/09/18 追記
実行するコマンド間違えていました。。。
$ ~/vendor/bin/phpunit --configuration ~/phpunit.xml.dist
雑な感想
やっとテストできたお! (^ω^ = ^ω^)
エラーはいっぱいでたけど、phpunit全然関係なかった。。。