私はテストが初めてで、phpspecを使用して、入力を検証するサービスクラスをテストしています。static::$base_rules
と を使用しているため、クラスをテストする方法がわかりませんstatic::$create_rules
。これらの値は、拡張する子クラスによって決定されますAcme\Services\Validation\Validator
。
私はphpspecで少し逆のことをしていることに気づきましたが、この確立されたクラスで練習したかったのですが、それが可能かどうか、またはAcme\Services\Validation\Validator
クラスのコーディングが不十分かどうかはわかりません.
phpspecでテストしたいクラス
<?php namespace Acme\Services\Validation;
use Illuminate\Validation\Factory as Validation;
abstract class Validator
{
/**
* @var array
*/
protected $rules;
/**
* @var object
*/
protected $validation;
/**
* @var Validator
*/
private $validator;
/**
* @param Validation $validator
*/
public function __construct(Validation $validator)
{
$this->rules = isset(static::$base_rules) ? static::$base_rules : [];
$this->validator = $validator;
}
/**
* @param $input
* @return \Illuminate\Validation\Validator
*/
public function validateCreateRules($input)
{
$rules = array_merge(static::$create_rules, $this->rules);
return $this->validate($input, $rules);
}
/**
* @param $input
* @param $rules
* @return \Illuminate\Validation\Validator
* @throws FormValidationException
*/
public function validate($input, $rules)
{
$this->validation = $this->validator->make($input, $rules);
if ($this->validation->fails())
{
throw new FormValidationException('Validation failed', $this->getValidationErrors());
}
return $this->validation;
}
/**
* @return mixed
*/
public function getValidationErrors()
{
return $this->validation->errors();
}
}
Validator を拡張するクラスの例を次に示します。
<?php namespace Acme\Services\Validation;
class MessageValidator extends Validator {
static $base_rules = array(
'type' => 'required',
'title' => 'required',
'message' => 'required'
);
static $create_rules = array(
'user' => 'required'
);
}
Acme\Services\Validation\Validator
phpspec を使用してどのようにテストできますか?