CakePHP ValidationエラーをチェックするTestコード

CakePHPのModelとControllerのテストでValidationエラーをチェックする

Model

CakePHPでValidationエラーを確認するTestコードです。

Postモデルに$validateを定義します。

App::uses('AppModel', 'Model');

class Post extends AppModel {
  public $validate = array(
    'title' => array(
      'rule' => 'notEmpty',
      'message' => 'title is required',
      'required' => true
    ),
  );
}

このModelを対象に

  • PostsControllerTest
  • PostTest

を作成し、Validationエラーのチェックを行います。

Modelのテストコード

setUp()でPostモデルを利用可能な状態にした上で、test_addNoData()でModelのsaveメソッドを実行可能にしています。saveメソッドに渡す引数にはテスト用のダミーデータを渡して、Validationエラーが発生するようにしています。

App::uses('Post', 'Model');

class PostTest extends CakeTestCase {

  public $fixtures = array(
    'app.post'
  );

  public function setUp() {
    parent::setUp();
    $this->Post = ClassRegistry::init('Post');
  }

  public function tearDown() {
    unset($this->Post);
    parent::tearDown();
  }

  public function test_addNoData() {
    $data = array('id' => 4, 'title' => '');
    $this->Post->save($data);
    $this->assertNotEmpty($this->Post->validationErrors);
  }
}

Controllerのテストコード

Controllerの作成

Validationエラーのチェックは、Model側のテストコードだけでなく、Controller側でテストすることも出来ます。最初にテスト対象となるControllerを作成します。

public function add() {
  if ($this->request->is('post')) {
    $this->Post->create();
    if ($this->Post->save($this->request->data)) {
      return $this->redirect('/posts/index');
    }
  }
}

PostsController内にaddアクションを追加しました。save()のタイミングでValidationチェックが発生しますので、ダミーの空データを渡して、Validationエラーをチェックします。

Validationエラーのチェック

Controller側のテストコードでは、$this->testAction()を使ってPOSTメソッドを送信します。

public function testAddNoData() {
  $result = $this->testAction('/posts/add',
    array(
      'data' => array(
        'Post' => array('id' => '4', 'title' => '')
      ),
      'method' => 'post',
    )
  );
  debug($this->controller->Post->validationErrors);
  $this->assertNotEmpty($this->controller->Post->validationErrors);
}

Modelのテストコードとは、

validationErrorsプロパティ

へのアクセス方法が異なるので注意が必要です。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CakePHP ValidationエラーをチェックするTestコードの記事にコメントを投稿