Ich habe nur das tun, um die now()
Helfer außer Kraft zu setzen, damit ich die scheinbare Kontrolle Zeit beim Ausführen von Tests. Ich folgte die regular advice von app/Http/helpers.php
zu schaffen und dann zu bootstrap/autoload.php
Zugabe etwa so:
require __DIR__.'/../app/Http/helpers.php'; // added
require __DIR__.'/../vendor/autoload.php';
Dies funktioniert in der Regel, weil, wie Marty sagt, alle Helfer nur definiert werden, wenn es nicht eine vorhandene Funktion mit diesem Namen. Die beiden obigen Zeilen laden Ihre benutzerdefinierten Helfer und führen dann alle Autoloader-Funktionen aus, die die Helfer von Laravel enthalten, und Ihre bereits definierte Funktion hat Vorrang.
Aber leider scheint autoload.php
nicht verwendet zu werden, wenn ich mit Behat teste, was ich benutze. Also brauchte ich eine alternative Lösung. Lange Rede, kurzer Sinn, der einzige einfache Weg, um sicherzustellen, dass Dateien vor Herstellerdateien automatisch geladen werden, indem das Paket https://github.com/funkjedi/composer-include-files verwendet wird.Um von seiner Liesmich zu zitieren:
In der Vergangenheit war es einfach, bootstrap/autoload.php
zu modifizieren, um Helfer einzubeziehen. Neue Versionen von PHPUnit enthalten jedoch den Composer Autoloader vor dem Ausführen der PHPUnit-Bootstrap-Datei. Folglich ist diese Methode des Überschreibens von Helfern nicht länger praktikabel, da sie einen fatalen Fehler auslösen wird, wenn Ihre Bootstrap-Datei enthalten ist.
So installierte ich dieses Paket composer require funkjedi/composer-include-files
verwenden und diese dann zu composer.json
hinzugefügt:
"extra": {
"include_files": [
"app/Http/helpers.php"
]
},
Einmal, das erledigt composer dump-autoload
ausführen, um die Dateien automatisch geladen zu regenerieren. Jetzt funktionieren die Überschreibungen sowohl während des normalen App-Vorgangs als auch während Tests.
Wenn Sie mehr Hilfe brauchen, um das eigentliche Makro zu schreiben, müsste ich wissen, was genau es tun soll ... – lukasgeiter
Nun, ich weiß, dass es so gemacht werden kann, aber ich würde gerne wissen, ob jemand eine Lösung hat anstatt nur jede Methode zu ändern oder eine andere zu erstellen. Laravel sollte für diese Art von Sachen flexibel sein. – guidsen
Okay. Vielleicht hat jemand anderes eine Lösung ... – lukasgeiter