【问题标题】:Symfony Unit Test Form Extension MockSymfony 单元测试表单扩展模拟
【发布时间】:2015-01-31 21:44:17
【问题描述】:

在通过 Composer 更新我的代码之前,我的表单单元测试正在运行。它现在在扩展模拟上失败了。 这是错误:

Argument 1 passed to Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension::__construct() must be an instance of Symfony\Component\Validator\ValidatorInterface, instance of Mock_ValidatorInterface_14b95ba0 given

这是我的作曲家需要的部分:

    "require": {
    "php": ">=5.3.3",
    "symfony/symfony": "~2.3",
    "doctrine/orm": "~2.2,>=2.2.3",
    "doctrine/doctrine-bundle": "~1.2",
    "twig/extensions": "~1.0",
    "symfony/assetic-bundle": "~2.3",
    "symfony/swiftmailer-bundle": "~2.3",
    "symfony/monolog-bundle": "~2.3",
    "symfony/monolog-bridge": "~2.4",
    "sensio/distribution-bundle": "~2.3",
    "sensio/framework-extra-bundle": "~2.3"
   }

这是单元测试设置方法中的验证模拟:

use Symfony\Component\Form\Test\TypeTestCase;
use Symfony\Component\Form\Forms;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension;
use Symfony\Component\Validator\ConstraintViolationList;
use Symfony\Component\Form\Extension\Core\CoreExtension;

class TestedTypeTest extends TypeTestCase
{

protected function setUp()
{
    parent::setUp();

    $validator = $this->getMock('\Symfony\Component\Validator\Validator\ValidatorInterface');
    $validator->method('validate')->will($this->returnValue(new ConstraintViolationList()));
    $formTypeExtension = new FormTypeValidatorExtension($validator);
    $coreExtension = new CoreExtension();

    $this->factory = Forms::createFormFactoryBuilder()
            ->addExtensions($this->getExtensions())
            ->addExtension($coreExtension)
            ->addTypeExtension($formTypeExtension)
            ->getFormFactory();
}

有人知道模拟可能有什么问题吗?非常感谢任何建议。

【问题讨论】:

  • 必须是 \Symfony\Component\Validator\ValidatorInterface" 与 "\Symfony\Component\Validator\Validator\ValidatorInterface" 的实例 你在模拟中似乎有太多的 'Validator'。跨度>
  • @AlisterBulman 是的,就是这样。删除第二个验证器有效。我使用 Symphony ~2.3 而不是 2.5,所以 Symfony\Component\Validator\Validator 的弃用在这里不适用。

标签: php unit-testing symfony composer-php


【解决方案1】:

来自 UPGRADE-2.5.md:

Symfony\Component\Validator\Validator 中的验证引擎是 被一个新的取代 Symfony\Component\Validator\Validator\RecursiveValidator。接着就,随即 更改,不推荐使用的几个类将在 Symfony 3.0。此外,验证器的 API 略有更改。更多的 详情可在 UPGRADE-3.0 中找到。

还有类似的问题: Problems with ValidatorConstraint in Symfony 2.5

【讨论】:

    【解决方案2】:

    您必须转义反斜杠才能在字符串中使用它们:

    $validator = $this->getMock('\\Symfony\\Component\\Validator\\Validator\\ValidatorInterface');

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多