проверка модульного тестирования 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, который является сервисом и должен быть разрешен с помощью некоторого контейнера для внедрения зависимостей.
У кого-нибудь есть идеи, как отключить пользовательский валидатор или исключить его из проверки ?
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());
}
}
Вы пробовали это?
$validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator();