(この記事は symfony ver. 1.0.6 で確認したものです)
functional test で sfPropelData を使った DB へのテスト用データの投入をしようとしたら
PropelException: No connection params set for propel
なんて言われてしまった。
databases.yml は all で設定してるし、web 経由の DB アクセスでは問題ないのに。
対策を調べてみたところ、「lime unit-test with Propel: not working (symfony forum message #26072)」を参考に以下のようにすることで期待通り動作しました。
include(dirname(__FILE__).’/../../bootstrap/functional.php’); // functional test のお約束
sfContext::getInstance(); // ここが肝。
// データ投入部分
$data = new sfPropelData();
$data->loadDataFromArray(array(
‘UserTable’ => array(
array(‘id’=>1, ‘name’=>’John Doe’, ‘age’=>25),
array(‘id’=>2, ‘name’=>’Jane Doe’, ‘age’=>18),
),
));
// 以下テストが続く…
ただし、注意点として、挿入したデータは実際にデータベースに記録されるため、テストごとにデータをクリアする必要があります。
また、このエラーは batch (`symfony batch default appname` で作成したもの)でも同様に発生しましたが、同じ対策方法で対応できました。