PhpUnit 无法访问外部 url

Posted

技术标签:

【中文标题】PhpUnit 无法访问外部 url【英文标题】:PhpUnit unable to access external url 【发布时间】:2016-08-01 02:29:36 【问题描述】:

在我的本地 Windows PC 上,我正在运行 XAMPP,它正在提供一个测试页(例如 http://localhost/testsite/testpage.html

现在在同一台机器上,我运行了一个 laravel 5.2 实例,其中有一个名为 testroute 的命名路由。

我写了一个phpunit测试用例

public function testBasicExample1() 
    $this->visit('testroute')->see('Something'); //Passes

public function testBasicExample2() 
    $this->visit('http://www.google.com')->see('Google'); //Passes

public function testBasicExample3() 
    $this->visit('http://localhost/testsite/testpage.html')->see('Something Else'); 
    //Fails as it is unable to reach the desired page (Received status code [404])

在 TestCase.php 中 $baseUrl = 'http://localhost:8000';

在.env APP_URL=http://localhost:8000

知不知道phpunit中无法访问localhost站点?

更新:

我发现即使http://www.google.com 也不起作用,它正在重定向到 laravel 的欢迎路线。 (测试通过,因为该页面中也有文本“Google”)。基本上它试图评估http://localhost:8000/www.google.com 并重定向到欢迎页面。

我不确定如何在 laravel 的 phpunit 中访问外部 url。

【问题讨论】:

你试过$this->visit('http://localhost:8000/testsite/testpage.html') 吗? 这对我没有在 localhost:8000 上运行的测试站点有何帮助?我在 localhost:80 即 xampp 上运行测试站点。顺便说一句,我测试过,它不起作用。 【参考方案1】:

我用这个把头撞在墙上很长一段时间。我不相信使用 Laravel click() 或 visit() 方法测试外部站点是可能的/功能性的。如果是,我没看到。

虽然我的需要只是检查我的所有链接,但也许这个 hack 可能对你有所帮助。我回到基本的 php 来断言正确返回的站点。

    $sites = \App\Website::pluck('website');

    foreach($sites as $site) 
        $file_headers = @get_headers($site);
        if (strpos($file_headers[0], '404 Not Found') || $file_headers[0] == null) 
            $exists = false;
            echo "  Failed on: ".$site."  ";
        
        else 
            $exists = true;
        
        $this->assertTrue($exists);
    

它并不能完全让你得到你想要的东西(看到一些东西),但对我来说,能够看到链接是有效的并且成功的就足够了。

测试速度很慢,因为它要发送到 x # 个站点。

HTH

【讨论】:

以上是关于PhpUnit 无法访问外部 url的主要内容,如果未能解决你的问题,请参考以下文章

无法访问 Agora URL

无法访问节点js中函数外部的响应对象数据

来自lan和外部的wordpress访问

访问外部链接路由器链接按钮

在 sencha touch 2 中加载外部 url

curl: (6) 访问子域时无法解析主机