проверка модульного тестирования symfony2 с помощью пользовательского валидатора


Я пытаюсь написать тест для модели, в которой есть как обычные валидаторы, так и пользовательский валидатор, использующий диспетчер сущностей и запрос. Я использую phpunit для своих тестов, если это имеет значение по какой-то причине.

Я тестирую пользовательский валидатор в другом тесте, отключая как диспетчер сущностей, так и запрос, а затем проверяя некоторые объекты. Поскольку это доказывает, что пользовательская проверка работает, мне нужно будет только проверить обычную проверку, и если это возможно, просто оставьте пользовательский валидатор вне поля зрения.

Вот моя модель:

/**
 * @MyAssert\Client()
 */
abstract class BaseRequestModel {

    /**
     * @Assert\NotBlank(message="2101")
     */
    protected $clientId;

    /**
     * @Assert\NotBlank(message="2101")
     */
    protected $apiKey;

    // ...

}

В моем тесте я получаю валидатор, создаю объект и затем проверяю его.

$validator = ValidatorFactory::buildDefault()->getValidator();
$requestModel = new RequestModel();
$errors = $validator->validate($requestModel);

Конечно, это не удается, так как он не может найти валидатор, определенный для MyAssert\Client, который является сервисом и должен быть разрешен с помощью некоторого контейнера для внедрения зависимостей.

У кого-нибудь есть идеи, как отключить пользовательский валидатор или исключить его из проверки ?

Author: Sgoettschkes, 2012-02-09

2 answers

Я бы выбрал что-то вроде этого:

class MyTest extends Symfony\Bundle\FrameworkBundle\Test\WebTestCase
{
    private function getKernel()
    {
        $kernel = $this->createKernel();
        $kernel->boot();

        return $kernel;
    }

    public function testCustomValidator()
    {
        $kernel = $this->getKernel();
        $validator = $kernel->getContainer()->get('validator');

        $violationList = $validator->validate(new RequestModel);

        $this->assertEquals(1, $violationList->count());
        // or any other like:
        $this->assertEquals('client not valid', $violationList[0]->getMessage());
    }
}
 6
Author: Florian, 2012-02-27 15:47:24

Вы пробовали это?

$validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator();
 3
Author: Andrej Sramko, 2014-03-28 12:56:51