2012-05-17 37 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

相關問題