2011-05-13 137 views
1

我正在做一些單元測試,但有模型驗證沒有被調用的問題。CakePHP - 單元測試驗證不叫

這是我在夾具中的。

<?php 
    class ItemFixture extends CakeTestFixture { 
    var $name = 'Item'; 
    var $import = array(
      'model' => 'Item', 
      'table' => 'items' 
    ); 

    var $records = array(array(
      'id' => 1, 
      'title' => 'Title2', 
      'year' => '1992' 
      ),array(
      'id' => 2, 
      'title' => 'Lorem ipsum dolor sit amet', 
      'year' => '1995' 
      )); 
    } 

?>

以下是我在模型單元測試

<?php 

    App::import('Model', 'Item'); 

    class ItemTest extends Item { 
      var $name = 'ItemTest'; 
      var $useTable = 'items'; 
      var $useDbConfig = 'test'; 
    } 

    class ItemTestCase extends CakeTestCase { 
      var $fixtures = array('app.item'); 

      function startTest() { 
        $this->ItemTest =& ClassRegistry::init('ItemTest'); 
      } 

      function testAdd() { 
        $data = array(
        'ItemTest' => array(
        'title' => 'Best article Evar!' 
        ) 
        ); 

        $result = $this->ItemTest->saveAll($data); 
      } 

      function endTest() { 

    } 

}

?>

這裏是我在驗證實際的模型。

'year' => array(
      'numeric' => array(
      'rule' => 'numeric', 
      'allowEmpty' => false, 
      'message' => 'Numbers only' 
    ), 
    'minLength' => array(
      'rule' => array('minLength', 4), 
      'message' => 'Year in YYYY format' 
    ), 
    'maxLength' => array(
      'rule' => array('maxLength', 4), 
      'message' => 'Year in YYYY format' 
    ) 

在testAdd中看到,我沒有通過年,這不應該是空的,但它實際上已經通過。爲什麼驗證不被調用?

謝謝

三通

回答

2

allowEmpty只有當數據包含指定的領域,你的情況year工作。要使驗證失敗,您必須將'year' => ''添加到testAdd中的$data陣列中,或者將'required' => true添加到您的驗證規則中,以強制執行數據中的year字段。請參閱http://book.cakephp.org/view/1148/allowEmpty