ひとりまとめ

もろもろのメモ

FuelPHPでPHPUnitのユニットテストをやる時、test環境を使ってる件

FuelPHPは、development、test、staging、productionという4つの環境ごとにconfigファイルを分けることができます。実際にどれを使うか?は、public直下の.htaccessの初っぱなあたりに書かれている

SetEnv FUEL_ENV production

を動かしたい環境にあった内容に書き換えればOKです。あるいはbootstrap.phpの書き換えでも可能。

 

また、oilを使ってコマンドを実行する場合は、

FUEL_ENV=test oil refine migrate

などのように、FUEL_ENVで指定して好きな環境で実行させることもできます。

 

 

そしてPHPUnit

なんだかんだtests以下にテストしたいことを書いて、これまたoilから次のように実行できます。

oil test --group=App

 

 

 

通常は特に問題ないんだと思うのですが、ちょっと困ったことが起きました。 

はじめてのフレームワークとしてのFuelPHP 改訂版

はじめてのフレームワークとしてのFuelPHP 改訂版

 

こちらを参考に進めていたところ、「管理ページの作成」の「ファンクショナルテストの追加」で、テストが通らない。。

 

現象としてはこんなことになってました。

・自分としてはdevelopmentの環境で実行してるつもり

・ファンクショナルテストで入力画面などを通して書き込まれるDBはdevelopment

PHPUnitの中でDB::insertなどをするDBはtest

 

明示的に指定しないとダメなのか?と思い、PHPUnitをoilで実行する際に

FUEL_ENV=development oil test --group=Functional

のように指定しましたが、状況は変わりません。

 

PHPUnitがなぜFUEL_ENVを無視するのか?と思って調べてみると、PHPUnit

/fuel/core/phpunit.xml

の中の

<server name="FUEL_ENV" value="test"/>

を参照しているようです。

 

そこで、このファイル自体を/fuel/app以下へコピーして、

<server name="FUEL_ENV" value="development"/>

のように書き換えると、PHPUnitもdevelopment環境を参照するようになりました。

 

ファンクショナルテストを一緒にやっていて、そっちは.htaccessの設定に従ってDBに値を書き込んでいました。.htaccessコメントアウトしたままだったので、デフォルトのdevelopmentが選択され、DBもそちらへ。

今回は同時にPHPUnitで直接データを書き込んでおり、同じDBに書き込まれていることを前提としたチェック方法になっていたことが原因かな?と思います。

 

もっとも、僕が本書中にあるこれらの記述を見落としていた可能性があるのと、そもそも「テストするのがtest環境」だと思うのであんまりやらないことかもしれませんが・・・。

FuelPHPPHPUnitを動かす時にどこを参照して決めてるのか気がつきにくかったので、備忘録がてら。