2011-05-13 143 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