lenk0belk0
@lenk0belk0
программироваю

Как правильно тестировать валидацию сущности?

Добрый вечер! В процессе осваивания модульного тестирования дошла до тестирования сущностей и форм. В документации ясно сказано, тестировать валидацию в форме не надо, надо это делать непосредственно для ограничений. (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". Что можно с этим сделать? Как лучше сделать, чтобы игнорировать это ограничение? Сделать группы валидации? Каким то образом удалить это ограничение из валидатора в тестах?
Может кто-нибудь сталкивался или подскажете, куда копать?
  • Вопрос задан
  • 708 просмотров
Пригласить эксперта
Ответы на вопрос 1
voronkovich
@voronkovich
Это не модульное тестирование, а интеграционное. Но формы, куда проще тестировать при помощи функциональных тестов.

Пример работы с формой можно увидеть в демо-приложении: https://github.com/symfony/demo/blob/96cab4e312a76...

Но там не тестируется валидация. Вообще говоря, вы первый человек на моей памяти, который делает подобные тесты :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы