2012-05-17 40 views
1

新来的单元测试...测试的文章控制器和我得到的$this->assertNotEmpty();CakePHP的2.1 - 测试一个简单的admin_add()控制器动作

故障应该不是这个被显示阵列充分验证错误?相反,我得到一个空数组。

看来我的验证规则不被拾起......为进一步的检查表明第::保存()是应该失败数据恢复真....

/** 
    * Admin Add 
    * @see controllers/MastersController::_admin_add() 
    * @return void 
    */ 
    public function admin_add(){ 
     //parent::_admin_add(); 
      if(!empty($this->request->data){ 
      $this->Article->save($this->request->data); 
      } 
    } 

/** 
    * Test Admin Add 
    * 
    * @return void 
    */ 
    public function testAdminAdd() { 
     #define sample passing data  
     $sampleDataPass = array(
      'Article'=>array(
       'title'=>'Test Article Add Will Pass', 
       'body'=>'Test Article Add Body', 
       'status_id'=>1, 
       'category_id'=>1, 
      ) 
     ); 

     #test action   
     $this->testAction('admin/articles/add', array('data'=>$sampleDataPass)); 
     $this->assertEmpty($this->Articles->Article->validationErrors); #####PASSES##### 

     #define sample failing data  
     $sampleDataFail = array(
      'Article'=>array(
       'title'=>'Test Article Add Will Fail', 
      ) 
     ); 



     $this->testAction('admin/articles/add', array('data'=>$sampleDataFail)); 
     $this->assertNotEmpty($this->Articles->Article->validationErrors); #####FAILS##### 
    } 

class Article extends AppModel { 

    /* 
    * Name 
    */ 
    public $name = 'Article'; 

    /* 
    * Validation Rules 
    */ 
    public $validate = array(
     'title' => array(
      'notempty' => array(
       'rule' => array('notempty'), 
       'message' => 'You must supply an article title in order to save.', 
      ), 
     ), 
     'body' => array(
      'notempty' => array(
       'rule' => array('notempty'), 
       'message' => 'You must supply an article title in order to save.', 
      ), 
     ), 
     'status_id' => array(
      'numeric' => array(
       'rule' => array('numeric'), 
       'message' => 'You must choose a status.', 
       'allowEmpty' => false, 
      ), 
     ), 
     'category_id' => array(
      'numeric' => array(
       'rule' => array('numeric'), 
       'message' => 'You must choose a category.', 
       'allowEmpty' => false, 
      ), 
     ) 
    ); 
} 

回答

2

CakePHP会忽略验证规则如果该字段不存在于数据中。

通过将选项'required'设置为true,将始终检查验证规则。

例如:关于审定

'title' => array(
     'notempty' => array(
      'rule' => array('notempty'), 
      'message' => 'You must supply an article title in order to save.', 
      'required' => true 
     ), 
    ), 

机制的文档中的CakePHP可以在这里找到:http://book.cakephp.org/2.0/en/models/data-validation.html#one-rule-per-field

+0

THX,这个工作一个魅力。 – devnull