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 核心测试套件正在做的事情。每当您不确定时,查看核心测试可能会给您提示。

另见