2016-08-05 45 views
1

Ich möchte vollständige URLs in E-Mails bekommen, die durch meine Tests in CakePHP 3.2 ausgelöst werden. Ich habe versucht mit den Volloptionen für $this->Html->image('image.jpg', ['fullBase' => true]) und $this->Url->build('/', true), aber sie scheinen nicht in Tests zu arbeiten.Vollständige URLs in E-Mails in CakePHP unittest

Wie kann ich beim Testen vollständige URLs in E-Mails erzwingen?

+0

'URL-> build ([url array], true)', ist es das, was Sie versucht? – arilia

+0

Ja :) (bearbeitete Frage, um das zu zeigen) –

Antwort

2

Es gibt keinen Host, wenn eine App in der CLI-Umgebung ausgeführt wird, da es sich nicht um eine Webanforderung handelt. Sie müssen die Basis-URL selbst konfigurieren.

Zitat aus der Dokumentation:

App.fullBaseUrl

Der Fully Qualified Domain Name (einschließlich Protokoll) root Ihre Anwendung. Dies wird verwendet, wenn absolute URLs generiert werden. Standardmäßig wird dieser Wert unter Verwendung der $_SERVER Umgebung generiert. Sie sollten es jedoch manuell definieren, um die Leistung zu optimieren, oder wenn Sie Bedenken haben, dass Personen den Header Host manipulieren. In einem CLI-Kontext (von Shells) kann die fullBaseUrl von $_SERVER nicht gelesen werden, da kein Webserver beteiligt ist. Sie müssen selbst angeben, wenn Sie URLs von einer Shell generieren müssen (z. B. beim Senden von E-Mails).

So kann man entweder so konfigurieren, dass über App.fullBaseUrl

Configure::write('App.fullBaseUrl', 'http://localhost'); 

oder ein wenig mehr spezifisch, so dass es gilt nur für den Router, über Router::fullBaseUrl()

Router::fullBaseUrl('http://localhost'); 

Sie können entweder so konfigurieren, dass in Ihre Anwendungskonfiguration (config/app.php), so dass Ihre App selbst auf normalen Webanfragen nicht mehr dynamisch erstellt wird und sie daher im Test verfügbar ist Oder, wenn Sie nur auf die Testsuite anwenden möchten, legen Sie es entweder in Ihren Bootstrap-Test (tests/bootstrap.php), um es global anzuwenden, oder legen Sie es in Ihren individuellen Testfalldateien fest.

Das ist es, was die CakePHP-Core-Testsuite auch tut. Wenn Sie sich nicht sicher sind, können Sie sich einen Blick auf die Kerntests werfen.

Siehe auch

+0

Vielen Dank für die Erklärung! Ich denke, dass ein Link/Verweis auf den App.fullBaseUrl-Eintrag in den Dokumenten von den Hilfeseiten (der Ort, an dem ich geschaut habe) benötigt wird. –