Ardent
パッケージが何をしているかをシミュレートしようとしています。保存する直前にモデルを検証しています。
私はこれを作成しましたBaseModel
(本によるとLaravel Testing decoded
)。そして、このコードを追加しました:
class BaseModel extends Eloquent {
protected static $rules = [];
public $errors = [];
public function validate(){
$v = Validator::make($this->attributes, static::$rules);
if($v->passes()) {
return true;
}
$this->errors = $v->messages();
return false;
}
public static function boot(){
parent::boot();
static::saving(function($model){
if($model->validate() === true){
foreach ($model->attributes as $key => $value) {
if(preg_match("/[a-zA-Z]+_confirmation/", $key)){
array_splice($model->attributes, array_search($key, array_keys($model->attributes)), 1);
}
}
echo "test"; //This is for debugging if this event is fired or not
return true;
} else {
return false;
}
});
}
}
さて、これは私のPost
モデルです:
class Post extends BaseModel {
public static $rules = array(
'body' => 'required',
'user_id' => 'required',
);
}
このテストでは、失敗することを期待しています。代わりに、合格です!、$post->save()
真を返します!
class PostTest extends TestCase {
public function testSavingPost(){
$post = new Post();
$this->assertFalse($post->save());
}
}
イベントecho
内にステートメントをスローしようとしたとき。saving
表示されなかったので、定義しsaving
たイベントが呼び出されていないことを理解しています。どうしてか分かりません。