Добрый вечер! В процессе осваивания модульного тестирования дошла до тестирования сущностей и форм. В документации ясно сказано, тестировать валидацию в форме не надо, надо это делать непосредственно для ограничений. (
symfony.com/doc/current/form/unit_testing.html).
Написала такой тест, работало замечательно: тест->тестовые случаи->полоска красная->код->полоска зеленая.
<?php
namespace App\Tests\Controller\Admin;
use App\Entity\MyEntity;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Validator\ConstraintViolation;
use Symfony\Component\Validator\Validation;
/**
* @group unit
*/
class MyEntityValidationTest extends TestCase
{
/**
* @dataProvider getMyEntityInvalidData
*/
public function testMyEntityIsInvalid($name, $description)
{
$validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator();
$myEntity = new MyEntity();
$myEntity->setName($name);
$myEntity->setDescription($description);
/** @var ConstraintViolation[] $violations */
$violations = $validator->validate($myEntity);
$this->assertTrue(count($violations) == 1);
}
public function getMyEntityInvalidData()
{
// empty name
yield ['name' => null, 'description' => 'valid description'];
// invalid name length
yield ['name' => '1', 'description' => 'valid description'];
//invalid name length
yield [
'name' => 'qwjdhfnvjcnfhvn nvhf chfn ndnwb nvbchf r nfnefhvn nvjdhf2',
'description' => 'valid description',
];
}
Потом понадобилось добавить ограничение на уникальность (Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity), и вот тут то все и сломалось. Нужна доктрина, а конкретнее, выдается ошибка "doctrine.orm.validator.unique' not found". Что можно с этим сделать? Как лучше сделать, чтобы игнорировать это ограничение? Сделать группы валидации? Каким то образом удалить это ограничение из валидатора в тестах?
Может кто-нибудь сталкивался или подскажете, куда копать?