LoginSignup
1
1

More than 5 years have passed since last update.

Jenkins + phing + phpunit

Last updated at Posted at 2015-03-14

で、ハマったこと。

※環境はお決まりの、Jenkins + Phing + phpunit + phpmd + phpcpd + git 的な感じ

アプリケーションのソースと、そのphpunitテストソースをコミットして、Jenkins→PhingXMLで自動実行したかった。

けれども、なぜかphpunitタスク実行中にアプリソースのrequire_onceやinclude_onceで、phpファイルが見つからないと怒られる。
怒られたのは、以下のような形でPHPのパスを指定していた箇所。

$_SERVER['DOCUMENT_ROOT'] . /path/from/applicationroot

調べてみてわかったこと。
$_SERVER['DOCUMENT_ROOT'] はApacheかphp.iniかで設定している。
phpunitでは、上記変数が未定義の状態になっているため、上の書き方ではファイルを見つけることができない。

これを解決するには、phpunitテストクラスのsetUpBeforeClass()で上記変数を定義してやればいい。

$_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__) . "/relative/path/to/application/root";

参考ページ

通常、phpは他のファイルをインクルードする際、ファイルのパスをアプリケーションルートからの相対パスか、自分自身がいる場所からの相対パスで指定できる。

普通にアプリケーションルートからの相対パスで読み込めるようにするには、Phingのbatchtestタスクの中で明示的にそのアプリ&テストソースが
置かれる場所をclasspathで指定してやればいい。
https://www.phing.info/docs/guide/stable/apcs59.html
こうした上で、アプリソースのインクルードパスをアプリケーションルートからの相対パスで書くようにすれば、タイトル通りの構成でテストの自動実行が可能になる。
→すみません、嘘を書きました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1