fixtureのテストデータをControllerのテストで利用する

CakePHPでテストケースを作成していると、モデルにも連携するような値をコントローラー側で利用したくなるときがある。(ログインや登録機能など)
その場合、Core側でのテストではController側にテストデータを用意しているようだが、Fixtureにも似たような値があるので、できればこれを利用していきたい。
その方法を調べてみた。

test用のコントローラーでfixtureは指定されているので(そしてこれはControllerをbakeすると勝手に追加されるので)、この値を使う事ができないか調べてみたんだけど、結論から言うと、そもそもFixtureって仮のデータをDBに格納するためのものなのでCakeFixtureManagerクラスとか調べても、getRecordsみたいなメソッドは存在しない。

一番手っ取り早いのは対象のFixtureのクラスをApp::usesとかしてクラスのインスタンスを生成させてしまうやり方で、これはいくつか実践している記事を見つける事ができた。

CakePHPでテストする時にFixtureのデータを再利用してDRYにしよう – でぃべろっぱーってへてむる
TestでFixturesのデータをexpectedに再利用したい – JavaScriptとかPerlとかPHPとかさくらVPSとか勉強する

ここら辺を参考に、HogeFixtureを作成して、その中で入力用のtestDataを用意してみた。

class HogeFixture extends CakeTestFixture {

        /**
        * Table name
        *
        * @var string
        */
        public $table = 'hoge';

        /**
        * Import
        *
        * @var array
        */
        public $import = array( 'model' => 'Hoge');

        /**
        * Records
        *
        * @var array
        */
        public $records = array(
               array (/* hoge recoreds ... */),
        );

       /**
        * Test Input Data
        *
        * @var array
        */
        public $testData = array(
               'login_id' => 'idididid',
               'login_pw' => 'pwpwpwpw',
        );
}

そして、各種テストケースのsetUpメソッドとかでこんな感じに指定する。

public function setUp() {
      parent::setUp();
      App:: uses('HogeFixture', 'Test/Fixture');
      $this->HogeFixture = new HogeFixture();
      $this->HogeFixture->testData;
}

で、上記のデータをテスト対象のメソッドに投げる

public function testManagerConfirm() {
      $testData = $this-> MemberFixture ->testData ;
      debug( 'ログインテスト' );
      $return = $this->testAction( '/login_method/' , array ('data' => $testData, 'method' => 'post' , 'return' => 'vars' ));
      $this->assertArrayNotHasKey( 'errors', $return);
}

たぶんこれでいいと思う。