• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z formularzem i EntityManager przy unit teście [symfony]

VPS Starter Arubacloud
+2 głosów
256 wizyt
pytanie zadane 30 lipca 2017 w PHP przez demotywatorking Obywatel (1,210 p.)

Próbuję napisać unit test dla formularza z konstruktorem, który jako argument ma EntityManager.

Po wielu próbach i przeszukaniu całego internetu udało mi się utworzyć taki obiekt w teście, ale i tak otrzymuję taki błąd:

Error: Call to a member function getPrioritysInUserLocaleToForm() on null

Klasa testu:

<?php
namespace Tests\AppBundle\Form\Type;

use AppBundle\Form\TodoType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\PreloadedExtension;
use Symfony\Component\Form\Test\TypeTestCase;

class TodoTypeTest extends TypeTestCase
{
    private $em;
    protected function setUp()
    {
        $this->em = $this->createMock(EntityManagerInterface::class);
        parent::setUp();
    }

    protected function getExtensions()
    {
        return array(
            new PreloadedExtension([
                new TodoType($this->em)
            ], [])
        );
    }

    public function testTodoType()
    {
        $form = $this->factory->create(TodoType::class, ['locale' => 'en']);
    }
}

i klasa formularza:

<?php
namespace AppBundle\Form;

use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type as Type;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class TodoType extends AbstractType
{
    private $em;

    public function __construct(EntityManagerInterface $em)
    {
        $this->em = $em;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title', Type\TextType::class)
            ->add('content', Type\TextareaType::class)
            ->add('priority', Type\ChoiceType::class, [ 'choices' => $this->addChoicesInUserLocale($options['locale']) ])
            ->add('dueDate', Type\DateTimeType::class, [
                'widget' => 'single_text',
                'attr' => ['class' => 'js-datepicker'],
                'html5' => false,
            ]);
    }

    public function configureOptions( OptionsResolver $resolver )
    {
        $resolver->setDefaults( [
            'locale' => 'en',
        ] );
    }
    /**
     * Method adds array with choices to ChoiceType in builder
     *
     * @param string $locale User's locale
     *
     * @return array All priority in user _locale formatted as array e.g. ['1' => 'low', ...]
     */
    private function addChoicesInUserLocale(string $locale): array
    {
        return $this->em->getRepository('AppBundle:Priority')
                ->getPrioritysInUserLocaleToForm($locale);
    }

}

Nie mogę znaleźć w ogóle podobnego błędu w google, ani na innych stronach, a sam sobie też nie mogę z tym poradzić. Z góry dzięki za wskazówki ;)

1 odpowiedź

+3 głosów
odpowiedź 8 sierpnia 2017 przez efiku Szeryf (75,160 p.)

Podobne pytania

0 głosów
0 odpowiedzi 266 wizyt
pytanie zadane 16 marca 2017 w JavaScript przez Kuba Pyda Początkujący (310 p.)
0 głosów
1 odpowiedź 288 wizyt
pytanie zadane 29 sierpnia 2021 w Java przez Lulex Użytkownik (820 p.)
+1 głos
0 odpowiedzi 291 wizyt
pytanie zadane 11 sierpnia 2021 w Java przez Lulex Użytkownik (820 p.)

92,974 zapytań

141,938 odpowiedzi

321,180 komentarzy

62,301 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...