Contao-Camp 2024
Ergebnis 1 bis 4 von 4

Thema: PhpUnit Initialize ContaoFramework

  1. #1
    Contao-Nutzer
    Registriert seit
    20.02.2019.
    Beiträge
    2

    Standard PhpUnit Initialize ContaoFramework

    Ich versuche die ersten Tests für meine eigenen Funktionen zu schreiben und habe dabei aber gleich zu Anfang ein Problem beim Initialisieren des Contaoframeworks.
    Als "Beispiel-Tutorial" und als Hilfe hab ich von von github das "Contao 4 test case" zur Hand genommen.

    Beim ausführen des Tests erhalte ich dann aber den Fehler: Use of undefined constant TL_ROOT - assumed 'TL_ROOT'
    Es scheint als so als ob der initialize des Contaoframeworks nicht ritchtig geklappt hat, da dies dort eigentlich erledigt werden sollte.
    Leider habe ich bisher nichts passendes gefunden mit dem ich das Problem lösen kann.

    PHPUnit habe ich über den Composer installiert und zusätzlich eine eigene Bootstrap-Datei eingebunden basierend auf den vorhanden Contao-Tests.

    Mein Start-Code sieht wie in dem genannten Beispiel aus:

    PHP-Code:
    use Contao\Config;
    use 
    Contao\CoreBundle\DependencyInjection\ContaoCoreExtension;
    use 
    Contao\CoreBundle\Framework\Adapter;
    use 
    Contao\CoreBundle\Framework\ContaoFramework;
    use 
    Contao\User;
    use 
    PHPUnit\Framework\MockObject\MockObject;
    use 
    PHPUnit\Framework\TestCase;
    use 
    Symfony\Component\DependencyInjection\ContainerBuilder;
    use 
    Symfony\Component\Filesystem\Filesystem;
    use 
    Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
    use 
    Symfony\Component\Security\Core\Authentication\Token\TokenInterface;

    class 
    MyClassTest extends TestCase
    {

        public function 
    testMyFunction()
        {
            
    $framework $this->mockContaoFramework();
            
    $framework
                
    ->expects($this->atLeastOnce())
                ->
    method('initialize');
            
    $container $this->mockContainer();
            \
    System::setContainer($container);
        }

    Die zugehörigen Funktionen die im Code aufgerufen werden sind alle aus dem "Tutorial" übernommen.

    Was mache ich falsch oder hab ich etwas vergessen?
    Danke für jede Hilfe im Vorraus

  2. #2
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Du rufst die Initialize-Methode des Framework-Mocks nicht auf. Füge mal ein "framework->initialize();" hinzu. Ob dies reicht, weiß ich gerade aus dem Kopf nicht, wirst du aber dann sehen. ;-)

  3. #3
    Contao-Nutzer
    Registriert seit
    20.02.2019.
    Beiträge
    2

    Standard

    Ich habe "framework->initialize();" hinzugefügt. Damit ist der Fehler mit "TL_ROOT" beseitigt. Danke dafür.

    Allerdings ergibt sich daraus jetzt ein Folgeproblem

    Und zwar findet es den "request_stack service" nicht:
    Symfony\Component\DependencyInjection\Exception\Se rviceNotFoundException : You have requested a non-existent service "request_stack".

    Der Codeteil sieht jetz wie folgt aus:
    PHP-Code:
    $framework $this->mockContaoFramework();
    $framework->initialize();
    $container $this->mockContainer();
    \
    System::setContainer($container);
    $container->get('contao.framework')->initialize(); 
    Den Teil von $framework mit expects und method:
    PHP-Code:
    $framework
                
    ->expects($this->atLeastOnce())
                ->
    method('initialize'); 
    habe ich rausgenommen da dieser mir folgenden Fehler brachte:
    Trying to configure method "initialize" which cannot be configured because it does not exist, has not been specified, is final, or is static

    Den Teil
    PHP-Code:
    $container->get('contao.framework')->initialize(); 
    habe ich in bspw. Backendcontroller gefunden um das Framework in dem Container zu initialiseren und ein paar Sachen laden zu lassen wie bspw. $GLOBALS.

    Eigentlich sollte der request_stack Service innerhalb der mockContaoFramework-Funktion gefunden werden.
    Bleibt die Frage warum findet er den Service nicht? Muss ich vielleicht noch irgendetwas extra laden oder includieren?
    Danke im Vorraus für weitere Hilfe

  4. #4
    Contao-Nutzer
    Registriert seit
    17.10.2014.
    Beiträge
    72

    Standard

    Hattest du hier eine Lösung gefunden? Hier hat jemand ein ähnliches Problem.

    https://community.contao.org/de/show...ork-in-PhpUnit

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •