CakePHP unittest中电子邮件中的完整URL

时间:2016-08-05 09:25:14

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

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

如何在测试时强制电子邮件中的完整网址?

1 个答案:

答案 0 :(得分:2)

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

另见