【问题标题】:Full URLs in emails in CakePHP unittestCakePHP unittest中电子邮件中的完整URL
【发布时间】:2016-12-11 15:59:22
【问题描述】:

我想获得由我在 CakePHP 3.2 中的测试触发的电子邮件中的完整 URL。我尝试使用 $this->Html->image('image.jpg', ['fullBase' => true])$this->Url->build('/', true) 的完整选项,但它们似乎在测试中不起作用。

如何在测试时强制在电子邮件中使用完整的 URL?

【问题讨论】:

  • Url->build([url array], true),你试过了吗?
  • 是的 :)(已编辑问题以表明这一点)

标签: unit-testing phpunit cakephp-3.x cakephp-3.2


【解决方案1】:

在 CLI 环境中运行应用程序时没有主机,因为它不是 Web 请求。您必须自己配置基本 URL。

引用自文档:

App.fullBaseUrl

完全限定域名(包括协议) 到您的应用程序的根目录。这在生成绝对值时使用 网址。默认情况下,此值是使用 $_SERVER 生成的 环境。但是,您应该手动定义它以优化 性能,或者如果您担心有人操纵Host 标题。在 CLI 上下文(来自 shell)中,fullBaseUrl 无法读取 来自$_SERVER,因为没有涉及网络服务器。你确实需要 如果您确实需要从 shell 生成 URL(例如 发送电子邮件时)。

所以你可以通过App.fullBaseUrl配置它

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

或者更具体一点,以便它仅适用于路由器,通过Router::fullBaseUrl()

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

您可以在您的应用程序配置 (config/app.php) 中对其进行配置,这样即使在常规 Web 请求中,您的应用程序也不会再动态构建它,因此也可以在测试环境中使用它,或者,如果您只是想应用于测试套件,将其放入您的测试引导程序 (tests/bootstrap.php) 以使其全局应用,或将其设置在您的个人测试用例文件中。

顺便说一句,CakePHP 核心测试套件也是这样做的。每当您不确定时,查看核心测试可能会给您一些提示。

另见

【讨论】:

  • 感谢您的解释!我认为需要从帮助页面(我查看的地方)的文档中指向 App.fullBaseUrl 条目的链接/引用。
猜你喜欢
  • 1970-01-01
  • 2013-12-31
  • 2019-08-14
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
相关资源
最近更新 更多