第3回 CakePHP 勉強会で宣言したテスト導入へ向けた動き
弊社もテストを導入しようといろいろと調査を進めてきたのですが、コントローラのアクションがテストしづらいという問題について次の手段を検討しています。
- Controller::setAction() を使って手続きを細分化する
- Component を使って手続きを細分化する
Component は言うに及ばず、 Controller::setAction() は苦心の末に思いつきました。
Controller::setAction() はアクションの途中から別のアクションを実行するためのメソッドです。 Controller::requestAction() との違いは Controller::setAction() でアクションを実行すると、フレームワークが「実行しているアクションが切り替わった」と認識する点です。一番わかりやすい違いが、 Controller::setAction() を使うとレンダリングされるビューが変わる点です。
たとえば次の場合…
function index()
{
$this->setAction("ordered_index");
}レンダリングされるビューは orderd_index になります。さながら index アクションがフロントコントローラのような役割を果たしていると考えれば理解が早いと思います。
本題はテストです。こうやってアクションの役割を絞りつつ細切れにしていけばテストもいくらかやりやすいのではと思っています。現在開発中のアプリケーションで検証してみたいと思います。
