Тест Phpunit ограничение Symfony с зависимостью с использованием ConstraintValidatorTestCase - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь выполнить модульное тестирование ограничения, которое имеет зависимость, и эта зависимость (PaymentGateway) имеет другие зависимости. Проблема здесь в том, что метод validate всегда возвращает false, и любое buildViolation вызывается. Любое предложение, как решить эту проблему?

Пока я заменю этот тест на функциональный, расширяющий WebTestCase, чтобы я мог правильно получить CepValidator. Я использую Symfony 3.4.

<?php

namespace Tests\Unit\AppBundle\Validator\Constraints;

use AppBundle\Validator\Constraints\Cep;
use AppBundle\Validator\Constraints\CepValidator;
use Symfony\Component\Validator\Test\ConstraintValidatorTestCase;

class CepValidatorTest extends ConstraintValidatorTestCase
{
    protected function createValidator()
    {
        $pg = $this->getMockBuilder('AppBundle\Utils\PaymentGateway')
            ->disableOriginalConstructor()
            ->setMethods(array('getZipCodeInfo'))
            ->getMock();

        return new CepValidator($pg);
    }

    public function testInvalidCep()
    {
        $this->validator->validate('22222222', new Cep());
        $this->buildViolation('Cep inválido.')->assertRaised();
    }
}

Cep Validator

<?php

namespace AppBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use AppBundle\Utils\PaymentGateway;

class CepValidator extends ConstraintValidator
{
    protected $paymentGateway;

    public function __construct(PaymentGateway $paymentGateway)
    {
        $this->paymentGateway = $paymentGateway;
    }

    public function validate($cep, Constraint $constraint)
    {
        $address = $this->paymentGateway->getZipCodeInfo($cep);
        if (!isset($address->city)) {
            $this->context->buildViolation($constraint->message)->addViolation();

            return false;
        }

        return true;
    }
}
...