针对特定虚拟主机的phpunit测试

时间:2019-11-28 00:49:01

标签: phpunit phpunit-testing

我已经苦苦挣扎了近一个星期,但找不到一个好的解决方案。

我正在使用laravel 4.2和php 5.7.27

我正在使用自定义虚拟主机:http://local.io

我正在使用本地化,如果在浏览器中输入,它将像这样:http://local.io/en/user/signin

这是我的测试功能:

public function testViewSignin()
{
    App::setLocale('en');
    $result = $this->call('GET', '/user/signin', [], [], ['HTTP_HOST' => 'local.io']);
}

但是在终端./vendor/bin/phpunit --verbose中运行它时,我总是收到html代码307,消息是Redirecting to http://local.io/en。 仔细检查后,服务器变量如下:

  SERVER_NAME => localhost
  HTTP_HOST => localhost
  HOST => local.io

我一直在玩:

    1. open phpunit.xml file, add <server name="host" value="local.io"/> and <server name="http_host" value="local.io"/>
    2. open TestCase.php, add URL::forceRootUrl('http://local.io'); in the setUp() function
    3. I even change the server headers in the $this->call() function

但是它总是将我重定向到http://local.io/en

希望有人能给我一些线索。

1 个答案:

答案 0 :(得分:0)

我终于找到了答案,我在这里分享了它,希望它可以帮助遇到同样问题的其他人。

该问题是由mcamara本地化软件包引起的,对于服务器的每个请求,服务器都将重定向到localized URL,然后客户端浏览器将发送另一个请求以及locale值,例如{{ 1}},因此对于每个请求都是重复请求。

我决定编写一个新的帮助器类,然后将其附加到路由文件(管理员和用户),它将检查环境是否为en,它将仅返回1个过滤器,否则将返回2个过滤器。

有关完整答案和解决方案的信息,请遵循本文: https://www.munderwood.ca/index.php/2016/03/16/testing-routes-with-laravel-localization/#comment-1562

此问题仅发生在Laravel 4.2中,至于版本5及更高版本,mcamara已经提供了一种解决方法,只需访问其github页面并滚动至底部