Как выполнить модульное тестирование формы Symfony 4 с полем EntityTypePhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как выполнить модульное тестирование формы Symfony 4 с полем EntityType

Сообщение Anonymous »

Как выполнить модульное тестирование формы Symfony 4 с полем EntityType

Когда я запускаю тест:

$ ./vendor/bin/simple-phpunittests/Unit/Form/ProductFormTest.php


Это вывод в моем терминале:


PHPUnit 6.5.8 от Себастьяна Бергманна

и участники.

Среда выполнения: PHP 7.2.4-1+ubuntu16.04.1+deb.sury.org+1 с Xdebug
2.7.0alpha2-dev Конфигурация : /var/www/project/phpunit.xml.dist

Тестирование приложения\Tests\Unit\Form\ProductFormTest E

1 / 1 (100%)

Время: 551 мс, Память: 6,00 МБ

Произошла 1 ошибка:

1) App\Tests\Unit\Form\ProductFormTest::formSubmitsValidData
Symfony\Component\Form\Exception\RuntimeException: Class
"App\Entity \Supplier", похоже, не является управляемым объектом Doctrine. Вы
забыли его отобразить?

/var/www/project/vendor/symfony/doctrine-bridge/Form/Type/DoctrineType.php:205
/var/www/project/vendor/symfony/options-resolver/OptionsResolver.php:858
/var/www/project/vendor/symfony/doctrine-bridge/Form/Type/DoctrineType.php :130
/var/www/project/vendor/symfony/options-resolver/OptionsResolver.php:766
/var/www/project/vendor/symfony/options-resolver/OptionsResolver.php:698
/var/www/project/vendor/symfony/form/ResolvedFormType.php:95
/var/www/project/vendor/symfony/form/FormFactory.php:76
/var /www/project/vendor/symfony/form/FormBuilder.php:97
/var/www/project/vendor/symfony/form/FormBuilder.php:256
/var/www/project/vendor /symfony/form/FormBuilder.php:206
/var/www/project/vendor/symfony/form/FormFactory.php:30
/var/www/project/tests/Unit/Form/ProductFormTest .php:86

ОШИБКИ! Тестов: 1, Утверждений: 0, Ошибок: 1.


Эта ошибка возникла после насмешки над классом ManagerRegistry. Кажется, что в этом модульном тесте нет сопоставления присутствующих сущностей доктрины.

Есть ли простой способ протестировать форму с полями «Symfony\Bridge\Doctrine\Form\Type\EntityType»?

src\App\Entity\Product.php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use App\Entity\Supplier;

/**
* Product Entity
*
* @ORM\Entity(repositoryClass = "App\Repository\ProductRepository")
* @ORM\Table(name = "product")
*/
class Product
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();

$this->setType(AbstractProduct::TYPE_PARENT);
}

/**
* To String
*
* @return string
*/
public function __toString()
{
return "[" . $this->id . "] Product: " . $this->ean . " | " . $this->name;
}

/**
* ID
*
* @var integer
*
* @ORM\Id
* @ORM\Column(name = "product_id", type = "integer")
* @ORM\GeneratedValue(strategy = "AUTO")
*/
protected $id;

/**
* EAN (European Article Number)
*
* @var string
*
* @ORM\Column(name = "product_ean", type = "string", length = 13)
*/
protected $ean;

/**
* Name
*
* @var string
*
* @ORM\Column(name = "product_name", type = "string", length = 128)
*/
protected $name;

/**
* Description
*
* @var string
*
* @ORM\Column(name = "product_description", type = "text", nullable = true)
*/
protected $description;

/**
* Supplier
*
* Many Products have one Supplier
*
* @var Supplier
*
* @ORM\ManyToOne(targetEntity = "Supplier", inversedBy = "products")
* @ORM\JoinColumn(name = "supplier_id", referencedColumnName = "supplier_id")
*/
protected $supplier;

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set ean
*
* @param string $ean
*
* @return AbstractProduct
*/
public function setEan($ean)
{
$this->ean = $ean;

return $this;
}

/**
* Get ean
*
* @return string
*/
public function getEan()
{
return $this->ean;
}

/**
* Set name
*
* @param string $name
*
* @return AbstractProduct
*/
public function setName($name)
{
$this->name = $name;

return $this;
}

/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}

/**
* Set description
*
* @param string $description
*
* @return AbstractProduct
*/
public function setDescription($description)
{
$this->description = $description;

return $this;
}

/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}

/**
* Set supplier
*
* @param \App\Entity\Supplier $supplier
*
* @return Product
*/
public function setSupplier(Supplier $supplier = null)
{
$this->supplier = $supplier;

return $this;
}

/**
* Get supplier
*
* @return \App\Entity\Supplier
*/
public function getSupplier()
{
return $this->supplier;
}
}


src\App\Form\ProductForm.php

namespace App\Form;

use App\Entity\Supplier;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;

class ProductForm extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$translationDomain = "product";

/*
* Card
*/
$builder->add("ean", TextType::class, [
"label" => "product.ean",
"required" => true,
"translation_domain" => $translationDomain,
]);

$builder->add("name", TextType::class, [
"label" => "product.name",
"required" => true,
"translation_domain" => $translationDomain,
]);

$builder->add("supplier", EntityType::class, [
"class" => Supplier::class,
"choice_label" => "name",
"label" => "supplier.name",
"required" => false,
"translation_domain" => "supplier",
]);
}
}


tests\Unit\Form\ProductFormTest.php

namespace App\Tests\Unit\Form;

use App\Entity\Product;
use App\Form\ProductForm;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Bridge\Doctrine\ManagerRegistry;
use Symfony\Component\Form\PreloadedExtension;
use Symfony\Component\Form\Test\TypeTestCase;

class ProductFormTest extends TypeTestCase
{
/**
* @var ManagerRegistry
*/
private $_managerRegistry;

/**
* {@inheritdoc}
*/
protected function setUp()
{
$this->_managerRegistry = $this->createMock(ManagerRegistry::class);

parent::setUp();
}

/**
* {@inheritdoc}
*/
protected function tearDown()
{
$this->_managerRegistry = null;

parent::tearDown();
}

/**
* {@inheritdoc}
*/
protected function getExtensions()
{
$entityType = new EntityType($this->_managerRegistry);

return [
new PreloadedExtension([$entityType], [])
];
}

/**
* @test
*/
public function formSubmitsValidData()
{
$createdAt = new \DateTime();

$formData = [
"ean" => "8718923400440",
"name" => "Plumbus",
"description" => "This is a household device so common it does not need an introduction",
];

$productComparedToForm = new Product();
$productComparedToForm
->setEan($formData["ean"])
->setName($formData["name"])
;

$productHandledByForm = new Product();

$form = $this->factory->create(ProductForm::class, $productHandledByForm);

$form->submit($formData);

static::assertTrue($form->isSynchronized());
static::assertEquals($productComparedToForm, $productHandledByForm);

$view = $form->createView();

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


Подробнее здесь: https://stackoverflow.com/questions/498 ... type-field
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как выполнить модульное тестирование Symfony DTO с атрибутами ограничений
    Anonymous » » в форуме Php
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Как выполнить модульное тестирование команды приложения Symfony/консоли?
    Anonymous » » в форуме Php
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как выполнить модульное тестирование команды приложения Symfony/консоли?
    Anonymous » » в форуме Php
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как выполнить модульное тестирование команды приложения Symfony/консоли? [закрыто]
    Anonymous » » в форуме Php
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • CollectionType форм Symfony EntityType
    Anonymous » » в форуме Php
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»