Проверка модульного тестирования symfony2 с помощью специального валидатора - PullRequest
6 голосов
/ 09 февраля 2012

Я пытаюсь написать тест для модели, которая имеет как несколько обычных валидаторов, так и собственный валидатор, используя менеджер сущностей и запрос.Я использую 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);

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

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

Ответы [ 2 ]

6 голосов
/ 27 февраля 2012

Я бы пошел с чем-то вроде этого:

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());
    }
}
3 голосов
/ 28 марта 2014

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

$validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator();
...