CakePHP 单元测试中电子邮件中的完整 URL
Full URLs in emails in CakePHP unittest
我想获得由我在 CakePHP 3.2 中的测试触发的电子邮件中的完整 URL。我尝试使用 $this->Html->image('image.jpg', ['fullBase' => true])
和 $this->Url->build('/', true)
的完整选项,但它们似乎在测试中不起作用。
如何在测试时强制在电子邮件中使用完整 URL?
当 运行 CLI 环境中的应用程序不是 Web 请求时,没有主机。您必须自己配置基础 URL。
引自文档:
App.fullBaseUrl
The fully qualified domain name (including protocol)
to your application’s root. This is used when generating absolute
URLs. By default this value is generated using the $_SERVER
environment. However, you should define it manually to optimize
performance or if you are concerned about people manipulating the Host
header. In a CLI context (from shells) the fullBaseUrl
cannot be read
from $_SERVER
, as there is no webserver involved. You do need to
specify it yourself if you do need to generate URLs from a shell (e.g.
when sending emails).
因此您可以通过 App.fullBaseUrl
配置它
Configure::write('App.fullBaseUrl', 'http://localhost');
或更具体一点,以便它仅适用于路由器,通过 Router::fullBaseUrl()
Router::fullBaseUrl('http://localhost');
您可以在您的应用程序配置中配置它 (config/app.php
),这样即使在常规网络请求中,您的应用程序也不会再动态构建它,因此它也可以在测试环境中使用,或者,如果您只想应用到测试套件,请将其放入您的测试 bootstrap (tests/bootstrap.php
) 以使其在全球范围内应用,或者将其设置在您的个人测试用例文件中。
顺便说一句,这也是 CakePHP 核心测试套件正在做的事情。每当您不确定时,查看核心测试可能会给您提示。
另见
- Cookbook > Configuration > General Configuration
- API > \Cake\Routing\Router::fullBaseUrl()
- https://github.com/cakephp/cakephp/blob/3.2.13/tests/bootstrap.php#L70
- https://github.com/cakephp/.../blob/3.2.13/tests/TestCase/Routing/RouterTest.php#L74
- https://github.com/cakephp/.../3.2.13/tests/TestCase/Routing/RouterTest.php#L520-L529
我想获得由我在 CakePHP 3.2 中的测试触发的电子邮件中的完整 URL。我尝试使用 $this->Html->image('image.jpg', ['fullBase' => true])
和 $this->Url->build('/', true)
的完整选项,但它们似乎在测试中不起作用。
如何在测试时强制在电子邮件中使用完整 URL?
当 运行 CLI 环境中的应用程序不是 Web 请求时,没有主机。您必须自己配置基础 URL。
引自文档:
App.fullBaseUrl
The fully qualified domain name (including protocol) to your application’s root. This is used when generating absolute URLs. By default this value is generated using the
$_SERVER
environment. However, you should define it manually to optimize performance or if you are concerned about people manipulating theHost
header. In a CLI context (from shells) thefullBaseUrl
cannot be read from$_SERVER
, as there is no webserver involved. You do need to specify it yourself if you do need to generate URLs from a shell (e.g. when sending emails).
因此您可以通过 App.fullBaseUrl
Configure::write('App.fullBaseUrl', 'http://localhost');
或更具体一点,以便它仅适用于路由器,通过 Router::fullBaseUrl()
Router::fullBaseUrl('http://localhost');
您可以在您的应用程序配置中配置它 (config/app.php
),这样即使在常规网络请求中,您的应用程序也不会再动态构建它,因此它也可以在测试环境中使用,或者,如果您只想应用到测试套件,请将其放入您的测试 bootstrap (tests/bootstrap.php
) 以使其在全球范围内应用,或者将其设置在您的个人测试用例文件中。
顺便说一句,这也是 CakePHP 核心测试套件正在做的事情。每当您不确定时,查看核心测试可能会给您提示。
另见
- Cookbook > Configuration > General Configuration
- API > \Cake\Routing\Router::fullBaseUrl()
- https://github.com/cakephp/cakephp/blob/3.2.13/tests/bootstrap.php#L70
- https://github.com/cakephp/.../blob/3.2.13/tests/TestCase/Routing/RouterTest.php#L74
- https://github.com/cakephp/.../3.2.13/tests/TestCase/Routing/RouterTest.php#L520-L529