I need help please because I am not an expert at PHPUNIT.
I feel that when I instantiate my Validator twice in my test class, that PHPUNIT ignores the 2nd instance ...
Here is my code: ```php
<?php
namespace Tests\Validation;
use PHPUnit\Framework\TestCase;
use Validation\Validator;
class ValidatorTest extends TestCase
{
public function testIsNotValid()
{
$_POST['input_test'] = '1';
$validator = new Validator();
$validator->rules([
'input_test' => [
'alpha '=> true, // "$_POST['input_test']" must be alpha
],
]);
// "isValid()" must return "false", and PHPUNIT returns "false"
$this->assertFalse($validator->isValid());
// "count($validator->getErrors())" Must return "1", and PHPUNIT returns "1"
$this->assertEquals(1, count($validator->getErrors()));
}
public function testIsValid()
{
$_POST['input_test'] = 'aaa';
$validator = new Validator();
$validator->rules([
'input_test' => [
'alpha' => true, // "$_POST['input_test']" must be alpha
],
]);
// "isValid()" must return "true", but PHPUNIT returns "false"
$this->assertTrue($validator->isValid());
// "count($validator->getErrors())" must return "0", but PHPUNIT returns "1"
$this->assertEquals(0, count($validator->getErrors()));
}
}
``` So my test "testIsValid()" does not work properly. On the other hand, if I delete the test "testIsNotValid()", the test "testIsValid()" starts to work ...
Anyone have an idea?
Thank you very much.
Thank, here my validator class :
<?php
class Validator implements ValidatorInterface
{
/**
* Name du input
*
* @var string
*/
private $input;
/**
* Valeur des rules qu'on passe à un input
*
* @var mixed
*/
private $value;
/**
* POST ou GET - Sera à POST par defaut
*
* @var mixed
*/
private $requestMethod;
/**
* Contiendra les éventuels erreurs
*
* @var array
*/
private $errors = [];
/**
* Validator constructor.
*
* @param null $requestMethod
*/
public function __construct()
{
$this->requestMethod = $_POST;
}
/**
* Vérification des données soumises
*
* @param array $array
*/
public function rules(array $array)
{
foreach ($array as $input => $rules) {
$this->input = $input;
if (is_array($rules)) {
foreach ($rules as $rule => $value) {
if ($rule != 'label') {
if ($rule == 'required' || $rule == 'file' || isset($this->requestMethod[$this->input])) {
$this->value = $value;
$this->callRule($rule);
}
}
}
}
}
}
/**
* Appeler la règle de validation
*
* @param string $rule
*/
protected function callRule(string $rule)
{
$methodVerify = 'verify'.Str::convertSnakeCaseToCamelCase($rule);
if (method_exists($this, $methodVerify)) {
$this->$methodVerify();
}
}
/**
* Vérifier que valeur entrée dans le champ est bien alphabétique
*/
private function verifyAlpha()
{
if ($this->value === true && !preg_match(self::REGEX_ALPHA, $this->requestMethod[$this->input])) {
$this->errors[$this->input] = $this->pushError('alpha');
}
}
/**
* @return bool - True si formulaire soumis est valide, false si pas valide
*/
public function isValid(): bool
{
return count($this->errors) === 0;
}
}
Thank you