如何在测试中加载表单类型

用户名
<?php
namespace Tabl\VenueBundle\Tests\Form;

use Symfony\Component\Form\Test\TypeTestCase;
use Tabl\VenueBundle\Entity\Venue;
use Tabl\VenueBundle\Form\VenueType;

class VenueTypeTest extends TypeTestCase
{

    public function testSubmitValidData() {
        $formData = array(
            'title' => 'Hello World',
        );

        $type = new VenueType();
        $form = $this->factory->create($type);

        $object = new Venue();
        $object->setTitle('Hello World');

        // submit the data to the form directly
        $form->submit($formData);

        $this->assertTrue($form->isSynchronized());
        $this->assertEquals($object, $form->getData());

        $view = $form->createView();
        $children = $view->children;

        foreach (array_keys($formData) as $key) {
            $this->assertArrayHasKey($key, $children);
        }
    }

}

我不断收到此错误消息:

Symfony\Component\Form\Exception\InvalidArgumentException: Could not load type "places_autocomplete"

如何解决?如何加载此类型,以便可以对表单执行功能测试?

places_autocompleteIvory GMaps Bundle的一部分

VenueType.php:

namespace Acme\VenueBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Bundle\FrameworkBundle\Routing\Router;
use Acme\VenueBundle\Entity\Attribute;
use Acme\VenueBundle\Form\AttributeType;

class VenueType extends AbstractType {
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title')
            ->add('address', 'places_autocomplete' , ['attr' => ['placeholder' => 'Start typing for suggestions'], 'label'=>'Location'])
            ->add('attributes', 'entity', array(
                'multiple'      => true,
                'expanded'      => true,
                'property'      => 'icon',
                'class'         => 'AcmeVenueBundle:Attribute',
            ))
            ->add('finish', 'submit');
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Acme\VenueBundle\Entity\Venue'
        ));
    }

    public function getName()
    {
        return 'venue';
    }
}
马泰奥

您必须实现getExtensions用于构建表单中使用的两种模拟表单类型的方法:PlacesAutocompleteTypeEntityType

此解决方案为我工作:

<?php


namespace Acme\DemoBundle\Tests\Form;


use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping\ClassMetadata;
use Ivory\GoogleMapBundle\Form\Type\PlacesAutocompleteType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\PreloadedExtension;
use Symfony\Component\Form\Test\TypeTestCase;
use Acme\DemoBundle\Entity\Venue;
use Acme\DemoBundle\Form\VenueType;

class VenueTypeTest extends TypeTestCase
{

public function testSubmitValidData() {
    $formData = array(
        'title' => 'Hello World',
    );

    $type = new VenueType();
    $form = $this->factory->create($type);

    $object = new Venue();
    $object->setTitle('Hello World');

    // submit the data to the form directly
    $form->submit($formData);

    $this->assertTrue($form->isSynchronized());
    $this->assertEquals($object, $form->getData());

    $view = $form->createView();
    $children = $view->children;

    foreach (array_keys($formData) as $key) {
        $this->assertArrayHasKey($key, $children);
    }
}


protected function getExtensions()
{

    // Mock the FormType: places_autocomplete

    // See Ivory\GoogleMapBundle\Tests\Form\Type\PlacesAutocompleteTypeTest
    $placesAutocompleteHelperMock = $this->getMockBuilder('Ivory\GoogleMap\Helper\Places\AutocompleteHelper')
        ->disableOriginalConstructor()
        ->getMock();

    $requestMock = $this->getMock('Symfony\Component\HttpFoundation\Request');
    $requestMock
        ->expects($this->any())
        ->method('getLocale')
        ->will($this->returnValue('en'));

    $placesAutocompleteType = new PlacesAutocompleteType(
        $placesAutocompleteHelperMock,
        $requestMock
    );

    // Mock the FormType: entity
    $mockEntityManager = $this->getMockBuilder('\Doctrine\ORM\EntityManager')
        ->disableOriginalConstructor()
        ->getMock();

    $mockRegistry = $this->getMockBuilder('Doctrine\Bundle\DoctrineBundle\Registry')
        ->disableOriginalConstructor()
        ->getMock();

    $mockRegistry->expects($this->any())->method('getManagerForClass')
        ->will($this->returnValue($mockEntityManager));

    $mockEntityManager ->expects($this->any())->method('getClassMetadata')
        ->withAnyParameters()
        ->will($this->returnValue(new ClassMetadata('entity')));

    $repo = $this->getMockBuilder('Doctrine\ORM\EntityRepository')
        ->disableOriginalConstructor()
        ->getMock();

    $mockEntityManager ->expects($this->any())->method('getRepository')
        ->withAnyParameters()
        ->will($this->returnValue($repo));

    $repo->expects($this->any())->method('findAll')
        ->withAnyParameters()
        ->will($this->returnValue(new ArrayCollection()));


    $entityType = new EntityType($mockRegistry);



    return array(new PreloadedExtension(array(
        'places_autocomplete' => $placesAutocompleteType,
        'entity' => $entityType,
    ), array()));
}
}

希望能有所帮助。让我知道。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在DetailView中加载评论表单?

来自分类Dev

如何在Sauce Ondemand中加载硒测试套件/案例?

来自分类Dev

如何在测试脚本中从项目中加载模块?

来自分类Dev

如何在类型为text的输入中加载文本

来自分类Dev

如何在WebView中加载html类型的url?

来自分类Dev

ZXing无法在iOS的Xamarin表单中加载类型

来自分类Dev

如何在Xcode中加载本地json文件以进行单元测试?

来自分类Dev

如何在Rails(测试环境)中加载Faker的自定义?

来自分类Dev

如何在Rails(测试环境)中加载Faker的自定义?

来自分类Dev

如何在MATLAB中从两种不同类型的目录中加载所有文件

来自分类Dev

Symfony:如何在没有JavaScript的功能测试中测试类型集合的表单域?

来自分类Dev

如何在Angular JS中加载页面?

来自分类常见问题

如何在Swift中加载GIF图像?

来自分类Dev

如何在JavaScript中加载外部文件?

来自分类Dev

如何在AsyncTask中加载多个图像

来自分类Dev

如何在MATLAB中加载复数.csv?

来自分类Dev

如何在requirejs中加载angularjs?

来自分类常见问题

如何在Azureml中加载实验?

来自分类Dev

如何在休眠中加载commandLink列表?

来自分类Dev

如何在Angular服务中加载$ cookies?

来自分类Dev

如何在GHCI中加载优化的代码?

来自分类Dev

如何在GoodData中加载时间?

来自分类Dev

如何在Laravel中加载模型?

来自分类Dev

如何在Phalcon中加载外部库?

来自分类Dev

如何在UIImageView中加载图像数组

来自分类Dev

如何在Phalcon中加载外部库?

来自分类Dev

如何在C ++中加载dll

来自分类Dev

如何在CakePHP中加载外部CSS?

来自分类Dev

如何在Javascript中加载资源?

Related 相关文章

热门标签

归档